源文件:
$cat test.file
aaa
bbb
ccc
我想插入echo test> /var/tmp/file
到第二行,想要的结果是这样的:
$ cat test.file
aaa
echo test > /var/tmp/file
bbb
ccc
我尝试了以下方法,但失败了:(
$ sed -i "2 s/^/echo test > /var/tmp/file\n/" test.file
sed: -e expression #1, char 20: unknown option to `s'
$ sed -i "2 s/^/"echo test > /var/tmp/file"\n/" test.file
-bash: /var/tmp/file\n/: Is a directory
答案1
尝试:
sed '2i echo test > /var/tmp/file' infile
2i
说在第二行插入文本。
您自己的解决方案也应该有效,但是由于您的文本中有/
您想要添加的内容,并且sed
它本身也使用/
字符作为替换字符,因此它们会相互冲突。
您有两种方法可以解决此问题:
将 sed
/
替换字符更改为输入文件中不存在的其他字符:sed '2 s:^:echo test > /var/tmp/file\n:' infile
/
对要添加到文件中的文本中的所有字符进行转义。sed '2 s/^/echo test > \/var\/tmp\/file\n/' infile
-i
当您对结果感到满意时,将用于就地替换的开关添加到您的命令中。
sed -i '2 s/^/echo test > \/var\/tmp\/file\n/' infile
答案2
这样就不需要转义任何字符了。读取文件命令r
会将文件的内容放在指定的行号之后,在本例中是在 Iine #1 之后。
$ echo 'echo test > /var/tmp/file' \
| sed -i '1r /dev/stdin' file