使用xargs和awk在适当的位置修改文件(在Mac上!)



我一直试图从mac上的一个文本文件中删除所有带有单词"kittees"的行。我一直在使用find和xargs来实现这一点,但它不起作用。以前我曾尝试将sed与"就地修改"选项一起使用,但没有成功。如何使用awk命令替换每个文件?

gfind -iname "dogs_kittens.txt" -type f -print0 | xargs -0 -0 -I %in <awk '!/kittens/{print}' %in > %in

我认为这样的东西会很合适:

awk '!/kittens/' dogs_kittens.txt > tmp && mv tmp dogs_kittens.txt

对于与/kittens/不匹配的每一行,执行默认操作,即打印该行。

如果您愿意再次尝试sed,它应该很简单:

gfind -iname "dogs_kittens.txt" -type f -execdir sed -i .meow '/kittens/d' {} +

我不确定为什么要使用gfind,因为单独使用sed就足够了:

sed -i '' '/kittens/d' dogs_kittens.txt

在OSX上,就地编辑要求您将其与-i(space)''一起使用以覆盖输入文件。

如果你可以使用GNU awk的最新版本,它有一个-i inplace选项。

最新更新