Unix 查找然后grep,然后遍历文件列表

Unix 查找然后grep,然后遍历文件列表,unix,grep,find,sh,aix,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" {} \; 我该怎么做? 我

我有以下脚本来替换文本

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文件不起作用。

您可以反过来,将“*.properties”文件列表交给grep。比如说

grep -l "originaltext" `find -name '*.properties'`
哦,如果您使用的是最新的linux发行版,grep中有一个选项可以实现这一点,而无需创建这么长的文件列表作为参数

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

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

使用,您可以在
while
循环中输入
查找的结果:

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" {} \;)
而IFS=read-r fname
做
sed's/originaltext/replacementText/g'$fname>tmp.tmp
mv tmp.tmp$fname

完成<第一个选项不起作用,正如我已经提到的,第二个选项对我不可用。谢谢你的回答哦,没有读最后一行,对不起。很好地阅读了fedorqui的回答。嘿,fedorqui,看起来文件管理器“*.properties”似乎不起作用。如果在循环中回显fname,则看不到属性file@Ahmad我没有真正明白你的目的。因为您使用了
查找-exec grep
,您可能想说
grep-l
(也就是说,小写的
l
),以便它只提供文件名作为输出。