sed-在多个文件中应用更改


11

我有数百个包含“ </foo:bar>” 的文件

cc
bb
aa
</foo:bar>
dd
xx
vv

我想一次全部更改为

cc
bb
aa
</foo:bar>

当我给它确切的文件名时,sed效果很好

sed -i“ / </ foo:bar> / q” 99999.txt

但是当我尝试一次更改所有这些内容时,我没有任何结果。

 sed -i "/<\/foo:bar>/q" *.txt

Answers:


19

尝试:

sed -s -n -i '0,/<\/foo:bar>/p' *.txt

-s 告诉sed将每个文件视为单独的文件。

因为我们不想sed在所有文件都完成后才退出,所以我们更改为仅从头开始<\/foo:bar>打印,而不打印其余各行。 -n告诉sed不要打印,除非我们明确要求。该命令0,/<\/foo:bar>/p告诉sed打印从文件开头到匹配的第一行范围内的任何行<\/foo:bar>

-s选项不适用于BSD / OSX版本。


@ fd0谢谢。更新了答案,以指出缺少-sBSD / OSX上的sed。
John1024 '16

对于GNU sed-i选项暗含-s...是否存在sed没有-s选项就无法解决该解决方案的实现?
森迪普•

7

</foo:bar>找到文件后停止读取文件:

使用GNU awk

gawk -i inplace '{print}; $0 == "</foo:bar>" {nextfile}' ./*.txt

perl

perl -ni -e 'print; close ARGV if $_ eq "</foo:bar>\n"' ./*.txt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.