我一直试图从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
选项。