我希望grep通过读取从文本文件中过滤出来的内容来过滤掉行。
这是我给grep的。它存储在foo.txt
:
".* /Users/1337/X$"
".* /Users/1337/R$"
".* /Users/1337/W$"
以下是它应该过滤的内容。它存储在bar.txt
:
1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2 /Users/1337/R
dc460da4ad72c482231e28e688e01f2778a88ce31a08826899d54ef7183998b5 /Users/1337/T
4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865 /Users/1337/W
53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3 /Users/1337/X
这是我运行的命令:
cat bar.txt | grep -f foo.txt
我希望它输出:
1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2 /Users/1337/R
4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865 /Users/1337/W
53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3 /Users/1337/X
但它没有输出任何东西。我该如何解决这个问题?
Mac OS X Yosemite,bash 3.2.57(1)-release
答案 0 :(得分:4)
您应该从foo.txt
删除双引号。引用由shell处理以保护特殊字符,但它们实际上并不是模式的一部分,并且在从文件读取时按字面意思处理。
如果您无法修改该文件,可以使用进程替换动态删除它们:
grep -f <(sed 's/^"\(.*\)"$/\1/' foo.txt) bar.txt
答案 1 :(得分:0)
您能否请关注awk
并告诉我这是否对您有所帮助。
awk 'FNR==NR{sub(/\$.*/,"",$NF);a[$NF];next} ($NF in a)' foo.txt bar.txt