在文件和输出文件名(文件命令和grep)中搜索具有特定文本的行
我知道这个问题可能对你们中的一些人来说很简单,但我尝试了几种组合并且搜索了很多,没有成功。在文件和输出文件名(文件命令和grep)中搜索具有特定文本的行
问题:我有一堆给定文件名的文件,但在不同的目录中。
例如,我在目录a,b,c,d中有一个名为'THEFILE.txt'的文件。我在一个包含这些子目录的目录中。在'THEFILE.txts'中的每个'我正在寻找具有以下模式的行:'有这个属性等等等等等等。所以我对这条线肯定知道的是,它以'拥有这个属性'开始,以'_apple'结尾。
我想:
发现。 -name'THEFILE.txt'-exec grep -l'有这个属性'{} \; 这个工作,但我得到'拥有这个属性'的每一行。我只想用_apple结尾
所以我试过了: 找到了。 -name'THEFILE.txt'-exec grep -l'拥有此属性* _apple'{} \; //不起作用,从我的谷歌搜索,我不指望它。
那么,接下来我试过了: 找不到。 -name'THEFILE.txt'-exec grep -l'拥有此属性[! - 〜] * _ apple'{} \; //不起作用
找不到。 -name'THEFILE.txt'-exec grep'有这个属性'{} \; | grep'_apple $' //此输出所有匹配的行,但不是文件名
查找。 -name'THEFILE.txt'-exec grep'有这个属性'{} \; | grep的-l '_apple $' //说文件标准输入
预期输出:(比如文件和C具有所需的线)
./a/THEFILE.txt
./c/THEFILE.txt
你可以只用grep -r,和如果你只想要文件名,将它管入awk。
grep -r "_apple$" . | awk -F: '{print $1}'
您试图2.是几乎没有。稍作调整:
find . -name THEFILE.txt -exec grep -q '^Has this property.*_apple$' '{}' ';' -print
它比递归grepping和更简单(没有管道)更精确。
上述工作原因(与grep -l
相反)是因为-exec
动作的计算结果为其命令的退出状态。 grep
如果找到它所查找的内容,将会以0状态(即true
)退出,这将使-exec
产生true
,并且这又会导致下一个操作(-print
)也被采用。
嗨托尼,感谢您的回复,但我需要在开头有“此属性”和结尾处有“_apple”的行。你的soln只匹配1个condn,我已经知道如何做 –
所以,只需更新正则表达式以匹配你想要的:'grep -r“^拥有这个属性。* _ apple $”。| awk -F:'{print $ 1}'' – tlm
谢谢,这完全解决了我的问题。我真的需要学会更好地使用正则表达式。 –