如何使用sed或awk在单独的文件中使用模式grep行

时间:2015-01-27 06:17:23

标签: linux unix awk sed grep

我有一个大数据文件(data.txt)和一个模式文件(patt.dat),数据如下所示

data.txt

[bottle]:[some description 1]    
[pen]:[some description 2]    
[mobile]:[some description 3]       
[pen_pencil]:[some description 4]  
[mouse]:[some description 5]    

patt.dat

pen    
mobile    

我这样给予

grep -F -f patt.dat data.txt    

然后我得到以下

[pen]:[some description 2]    
[mobile]:[some description 3]    
[pen_pencil]:[some description 4]    

但我只想要,

[pen]:[some description 2]    
[mobile]:[some description 3] 

请帮助解决任何问题 我不想硬编码任何东西,因为会有很多这样的模式,硬编码都不会好看。

如果可以通过任何其他方式实现相同的目的,请同时提出建议。

3 个答案:

答案 0 :(得分:4)

使用-w进行单词匹配,例如:

grep -wf patt.dat data.txt 
Output:
[pen]:[some description 2]
[mobile]:[some description 3]

答案 1 :(得分:1)

sed 's/.*/^\[&]/' patt.dat > /tmp/patt_grep.dat
egrep -F -f /tmp/patt_grep.dat data.txt

需要更改一下patt.dat内容以允许另一个有效的工具工作。我使用egrep来允许^但是可以使用(f)grep来改变格式[word]:[而不是

答案 2 :(得分:1)

以下是awk

的使用方法
awk -F"[][]" 'FNR==NR {a[$1];next} $2 in a' patt.dat data.txt
[pen]:[some description 2]
[mobile]:[some description 3]

如果您想测试更多参数,awk可能是最简单的解决方案 它将模式存储在数组a中,然后测试是否在数组2中找到了字段a,如果找到,则打印该行。