linux - 在bash中将一个文本文件的内容插入另一个文本文件
问题描述
我想将一个文本文件的内容(带有换行符)插入另一个文本文件的预定位置(在某个字符串之后):我尝试了以下内容:基本文件:
cat base
ONE
TWO
THREE
扩展名:
cat ext
100
200
300
400
500
600
700
800
900
A00
B00
C00
D00
和我试过的脚本:
#!/bin/bash
ext=$(<ext)
sed -i "s/TWO/TWO\n$ext/" base
这给了我sed: -e expression #1, char 14: unterminated `s' command
解决方案
如果你想直接编辑它一个文件,我总是建议ed
而不是非标准的sed -i
(如果不同的实现sed
支持它的行为不同,这里的常见问题来源):
printf "%s\n" "/TWO/r ext" w | ed -s base
将在base中包含TWO的第一行之后插入文件ext的内容,然后将新版本的base写回磁盘。
如果您必须使用sed
,正确的调用将看起来非常相似(毫不奇怪,因为它们是同级命令):
sed -i '/TWO/r ext' base
(不过,这将在基数的每两个之后插入 ext 文件,而不仅仅是第一个。)
两者中的关键是r
命令,它读取给定文件的内容并将其插入到具有匹配地址的行之后。比尝试将文件内容读入变量并直接在ed
/sed
命令中包含文本要好得多。
如果要在行后插入变量的内容,可以使用
printf "%s\n" "/TWO/a" "$ext" . w | ed -s base
(只要变量没有只有句点的行)
或使用 GNU sed
sed -i "/TWO/a ${ext//$'\n'/\\\n}" base
在寻址行之后附加文本。
推荐阅读
- javascript - 有没有办法从后端自动渲染项目?
- jenkins - 在 Jenkins 中启用永久禁用的项目
- c# - 将 float[] 转换为 byte[] 的最快方法是什么?
- linux - 如何设置 ubuntu (linux) 从命令行使用 github.com 的双重身份验证
- c - 我的计算器忽略了我用来读取数学运算符的 scanf 函数
- python - 在烧瓶应用程序中提取带有关键词的句子
- java - Android Google Calendar API 获取凭据
- python - wkhtmltopdf 以非零代码 -9 退出。错误。我怎样才能摆脱这个错误?
- arrays - 按 id 组合两个数组
- html - 做什么
标签在html中做什么?