![为什么“sed”不扩展文件的长度?](https://linux22.com/image/125332/%E4%B8%BA%E4%BB%80%E4%B9%88%E2%80%9Csed%E2%80%9D%E4%B8%8D%E6%89%A9%E5%B1%95%E6%96%87%E4%BB%B6%E7%9A%84%E9%95%BF%E5%BA%A6%EF%BC%9F%20.png)
给定一个包含以下行的文件:
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