给定一个包含以下行的文件:
1. 1
2. 2
3. 3
4. 4
5. 5
我运行“sed”命令:
sed -i "/4/a\text\" filename.txt
文件最终为:
1. 1
2. 2
3. 3
4. text
5. 4
表示“5”的行现在消失了。
最后一行似乎已被推迟,就好像文件中的行数没有改变一样。
我运行的命令没有使用“-i”标志,它代表“插入到位”。
sed "/3/a\text\" filename.txt > temp.txt; mv temp.txt filename.txt;
但收到了相同的效果,即使未指定“就地”标志。这是 'sed 的预期功能吗?有没有办法允许添加行?
答案1
如果您想添加文本行,您可以使用简单的 quote 。
例子 :
[root@h2g2w ~]# sed -i '/4/a\text\' toto
[root@h2g2w ~]# cat toto
1
2
3
4
text
5
[root@h2g2w ~]#
这也可以...您确定您使用的 sed 版本是 gnu 版本吗?即使双引号也可以(但在这里使用它们是用户错误)
[root@h2g2w ~]# sed -i "/4/a\text\ " toto
[root@h2g2w ~]# cat toto
1
2
3
4
text
text
5
[root@h2g2w ~]#
答案2
首先,如果我将您发布的命令直接放入 shell 中,则会导致语法问题。
其次,您提供的两个命令最终都会通过 sed 或其他命令直接修改原始文件“filename.txt”。
正如您猜测的那样,您的第一个示例会导致 sed 通过使用“-i”开关直接修改文件。在第二个示例中,“filename.txt”被命令覆盖mv temp.txt filename.txt
。
因此,在这两个示例中,您都会看到预期的结果。
是的,sed 可以用来插入行。
https://stackoverflow.com/questions/6537490/insert-a-line-at-specific-line-number-with-sed-or-awk