2015-09-25 90 views
-1

我有一个如下所述的文本文件,并且我将传递一个我希望得到相应输出的输入。grep命令不能像我期望的那样工作

输入文件:test.txt

abc:abc_1 
abcd:abcd_1 
1_abcd:1_abcd_bkp 
xyz:xyz_2 

所以如果我使用abc上述test.txt文件,我想abc_1;如果我通过abcd,我需要abcd_1作为输出。

我试过cat text.txt | grep abc | cut -d":" -f2,2,但我得到的输出

abc_1 
abcd_1 
1_abcd_bkp 

,当我想只有abc_1

+0

你的意思是这样做(与下划线)? 'cat text.txt | grep abc_ | cut -d“:”-f2,2' –

+0

关于询问和投票,请阅读http://stackoverflow.com/help/someone-answers。谢谢 – Cyrus

回答

1

随着GNU grep的移动键:

grep -Po "^abc:\K.*" file 

输出:

 
abc_1 

\K保持至今匹配了整体正则表达式匹配的文本。

1

您想将regular expression-e开关一起使用。 特别是,正则表达式允许您使用插入符号(^)来表示行的开始。

既然你只关心abc当它在一行的开始,它的后面:,你想:

cat test.txt | grep -e "^abc:" | cut -d":" -f2,2 

输出:

abc_1 
1

awk来救援!

awk -F: -v key="abc" '$1==key{print $2}' 

使用:作为分隔符做了查找关键现场1回场2

或者,在脚本

awk -F: '$1=="abc"{print $2}' 
1

你可以尝试排除-v:

猫的text.txt | grep abc | 的grep -VI ABC [A-Z]

不知道这会工作完全,尝试用那种想法

1

的东西如果不指定要打印的整个行会或在其他情况下,行第二场。

awk -F: '/abc_/{print $2}' file 
abc_1 

awk -F: 'NR==1,/abc/{print $2}' file 
abc_1 
+0

您能否添加一个解释,例如请链接到文档? –

+0

我没有链接,但考虑到字段分隔符作为冒号和abc匹配第一行打印第二个字段。 –

+0

请将它添加到您的答案中。类似于@ karakfa的回答的描述会很好。谢谢。 –

相关问题