关于this post,如何排除一个或多个文件应用字符串替换?通过使用上述帖子作为示例,我希望能够在给定目录的所有后代文件中将“apples”替换为“oranges”,除了,例如./fpd/font/symbol.php
。< / p>
我的想法是在find命令中使用-regex
开关,但不幸的是它没有像-v
命令那样的grep
选项,因此我无法否定正则表达式不匹配必须进行替换的文件。
答案 0 :(得分:1)
没有测试过这个,但它应该有效:
find . -path ./fpd/font/symbol.php -prune -o -exec sed -i 's/apple/orange/g' {} \;
答案 1 :(得分:1)
您可以使用!
(或-not
)与-name
结合使用否定:
$ find .
.
./a
./a/b.txt
./b
./b/a.txt
$ find . -name \*a\* -print
./a
./b/a.txt
$ find . ! -name \*a\* -print
.
./a/b.txt
./b
$ find . -not -name \*a\* -print
.
./a/b.txt
./b
答案 2 :(得分:1)
我在我的Git存储库中使用它:
grep -ilr orange . | grep -v ".git" | grep -e "\\.php$" | xargs sed -i s/orange/apple/g {}
它会:
.git
文件夹; .php
个文件。毋庸置疑,您可以包含尽可能多的grep
个图层,以过滤传递给xargs
的列表。
已知问题:
至少在我的Windows环境中,它无法打开路径或名称中包含空格的文件。从未想过那一个。如果有人知道如何解决这个问题,我想知道。