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 text-processing sed — 舍万 source
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版本。 — 约翰1024 source @ 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 — StéphaneChazelas source
-s
BSD / OSX上的sed。