Shell 将grep与正则表达式结合使用

Shell 将grep与正则表达式结合使用,shell,scripting,grep,Shell,Scripting,Grep,命令grep-vf1.txt 2.txt>3.txt放入3.txt什么2.txt有什么1.txt没有,但是我如何使用grep只比较有(0-9)的字符串 如果希望只保留与模式匹配的结果,只需对输出进行后期处理: grep -vf 1.txt 2.txt | grep '([0-9]\+)' > 3.txt 或者,如果您希望仅使用1.txt中与比较模式匹配的行,您可以尝试: grep -vf <(grep "([0-9]\+)" 1.txt) 2.txt > 3.txt gre

命令
grep-vf1.txt 2.txt>3.txt
放入
3.txt
什么
2.txt
有什么
1.txt
没有,但是我如何使用
grep
只比较有(0-9)的字符串


如果希望只保留与模式匹配的结果,只需对输出进行后期处理:

grep -vf 1.txt 2.txt | grep '([0-9]\+)' > 3.txt
或者,如果您希望仅使用
1.txt
中与比较模式匹配的行,您可以尝试:

grep -vf <(grep "([0-9]\+)" 1.txt) 2.txt > 3.txt
grep-vf 3.txt

简单的方法是:

在保存到3.txt之前,将结果导入
grep-E'[0-9]+'>3.txt

看起来像:
grep-vf|grep-E'[0-9]+'>3.txt

如果您给出一些1.txt、2.txt和预期的3.txt的示例,可能有一种有效的方法。

这也应该有效:

awk 'FNR==NR {arr[$0];next} !($1 in arr)' 1.txt 2.txt

关于

,因此您希望最终输出仅包含模式,或仅使用具有该模式的行进行比较?是否要比较两个文件,但
1.txt中的
(0001)compare
应匹配
(10)compare
中的
2.txt
?是否有使用grep的特定原因?我不确定你到底想做什么,但听起来awk更合适。发布一些示例输入和预期输出会有很大帮助。Shawn,Lev感谢您的回复。这正是我想要的:grep-vf 1.txt 2.txt | grep'([0-9]\+)'>3.txt。。。但我并没有得到所有预期的结果[(00001)例如不起作用]。想法是所有从(0000)到(9999)的字符串。如果您想将模式限制为4位,即(0000)到(9999),请尝试
grep-e“\([0-9]{4}\”
Shawn,我相信它不起作用。1.txt((1)aaa,测试,(03)测试)。。。2.txt((0003)bla,test3,(1111)ble)。。。当正则表达式文件3.txt应该有(0003)bla和(1111)ble时,它将保持为空。。。请注意,txt文件的内容在单独的行上。恐怕我不理解您的要求。您能否发布示例输入(用于
1.txt
2.txt
)以及您期望的输出?1.txt具有abc,(0001)def,ghi。。txt有jkl,(0001)def,(0007)xyz。。。我希望3.txt只有(0007)xyz,因为它有([0-9]),而它不存在于1.txt中
awk 'FNR==NR {arr[$0];next} !($1 in arr)' 1.txt 2.txt