为什么“sed”不扩展文件的长度?

为什么“sed”不扩展文件的长度?

给定一个包含以下行的文件:

 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

相关内容