找到然后grep然后遍历文件列表

时间:2015-11-24 10:44:34

标签: unix grep find sh aix

我有以下脚本来替换文字。

grep -l -r "originaltext" . |  
while read fname  
do  
sed 's/originaltext/replacementText/g' $fname > tmp.tmp  
mv tmp.tmp $fname  
done

现在在这个脚本的第一个声明中,我想做这样的事情。

find . -name '*.properties' -exec grep "originaltext" {} \;

我该怎么做?
我在AIX上工作,所以--include-file不起作用。

2 个答案:

答案 0 :(得分:1)

您可以反过来将'* .properties'文件列表提供给grep。例如

grep -l "originaltext" `find -name '*.properties'`

哦,如果你在最近的Linux发行版中,grep中有一个选项来实现它,而不必创建那么长的文件列表作为参数

grep -l "originaltext" --include='*.properties' -r .

答案 1 :(得分:1)

通常,我更喜欢使用find来查找FIND文件而不是grep。看起来很明显:)

使用process substitution,您可以为while循环提供find的结果:

while IFS= read -r fname  
do  
  sed 's/originaltext/replacementText/g' $fname > tmp.tmp  
  mv tmp.tmp $fname  
done < <(find . -name '*.properties' -exec grep -l "originaltext" {} \;)

注意我使用grep -l(大L),以便grep只返回与模式匹配的文件名。