我正在编写一个bash shell脚本,在其中我试图删除2个标记之间的文本文件中的行
START
...
...
END
要消除这种情况,我尝试了一些事情,每次将文本文件留空。
sed '/START/,/END/d' myfile.txt > myfile.txt
sed '/START/d' myfile.txt > myfile.txt
只要我的代码中有sed命令,我的整个文件就会被删除,而不仅仅是我要删除的部分。
答案 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