将命令行信息插入到文件的指定行

将命令行信息插入到文件的指定行

源文件:

$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它本身也使用/字符作为替换字符,因此它们会相互冲突。

您有两种方法可以解决此问题:

  1. 将 sed/替换字符更改为输入文件中不存在的其他字符:

    sed '2 s:^:echo test > /var/tmp/file\n:' infile
    
  2. /对要添加到文件中的文本中的所有字符进行转义。

    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

相关内容