我尝试使用此表达式将一个文本文件的内容插入另一个文本文件后给定的字符串中。这是一个简单的 bash 脚本:
TEXT=`cat file1.txt`
sed -i "/teststring/a \
$TEXT" file2.txt
这将返回一个错误,“sed:-e 表达式 #1,字符 37:未知命令:'M'”
问题在于 file1.txt 的内容实际上是一个私有证书,因此它包含大量文本和不寻常的字符,这似乎导致了问题。如果我用一个简单的 ASCII 值替换 $TEXT,它就可以正常工作,但是当它读取 file1.txt 的大量内容时,它会失败并出现该错误。
有什么方法可以执行此操作吗?我的 sed 语法不正确,还是我的引号位置错误?
答案1
使用 r 读取证书文件,而不是使用 a 附加字符串——sed 会造成混淆,因为您首先需要转义要附加的字符串中的换行符和特殊字符。您不需要转义文件中的任何文本——sed 只会读取并附加它。
sed -i "/teststring/r file1.txt" file2.txt
答案2
我会使用ed
编辑器。它类似于vi
命令行。
例子:
$ echo foobar > /tmp/orig
$ cat > /tmp/add << EOF
> blablabla
> blablabla
> blablabla
> EOF
$ printf "/foobar\n.r /tmp/add\nwq\n" | ed /tmp/orig
7
foobar
30
37
$ cat /tmp/orig
foobar
blablabla
blablabla
blablabla