如何用Bash的grep命令匹配指定模式并排除特定内容?
问题原因
你之前的命令里,> grep.txt的位置错误——它会把第一个grep的所有输出直接写入文件,导致后续的管道| grep -v没有任何输入数据可以处理,所以排除规则完全没起作用。
解决方法
方法1:管道后再重定向
先执行匹配关键词的grep,通过管道把结果传给grep -v完成排除,最后将最终结果写入文件。注意排除时也要加-i忽略大小写,避免因大小写差异漏排除:
grep -i -e 'FinancePlus' -e 'Sungard' -e 'Pentamation' -e 'efp' $(cat find.out) | grep -v -i -e 'PROPRIETARY' -e 'CONFIDENTIAL' -e 'Public' > grep.txt
方法2:单条grep命令完成(更高效)
直接在同一条grep里同时指定匹配模式和排除模式,无需额外管道:
grep -i -e 'FinancePlus' -e 'Sungard' -e 'Pentamation' -e 'efp' -v -i -e 'PROPRIETARY' -e 'CONFIDENTIAL' -e 'Public' $(cat find.out) > grep.txt
这条命令的逻辑是:找出所有包含任意一个目标关键词(忽略大小写),且不包含任意一个排除关键词(忽略大小写)的行,最终写入grep.txt。
内容的提问来源于stack exchange,提问作者user5586678
相关产品推荐
相关产品推荐

