sed不会删除我想要的东西

时间:2014-08-15 14:11:20

标签: bash shell sed

我正在编写一个bash shell脚本,在其中我试图删除2个标记之间的文本文件中的行

START
...
...
END

要消除这种情况,我尝试了一些事情,每次将文本文件留空。

sed '/START/,/END/d' myfile.txt > myfile.txt

sed '/START/d' myfile.txt > myfile.txt

只要我的代码中有sed命令,我的整个文件就会被删除,而不仅仅是我要删除的部分。

3 个答案:

答案 0 :(得分:3)

您正在将stdout重定向到与stdin相同的文件。执行此操作时,将解释您的重定向购买shell并打开一个新文件以使用该名称进行写入。新创建的空白文件将覆盖您现有的文件。您需要将输出重定向到其他文件,或者使用-i sed选项编辑文件。

答案 1 :(得分:1)

您无法重定向到正在阅读的文件。这会删除你文件的内容,正如你所注意到的那样。

相反,要么重定向到其他文件,要么就地编辑:

sed -i ... myfile.txt

答案 2 :(得分:0)

awk中的一种方式。

awk '/START/{x=1}/END/{x=0}!x{print > ARGV[1]}' myfile.txt

便携式

awk '/START/{x=1}/END/{x=0}!x{print > "myfile.txt"}' myfile.txt