Linux grep命令没有按我的预期工作

Linux grep命令没有按我的预期工作,linux,shell,grep,sh,cut,Linux,Shell,Grep,Sh,Cut,我有一个如下所述的文本文件,同时我将传递一个输入,我想要相应的输出 输入文件:test.txt abc:abc_1 abcd:abcd_1 1_abcd:1_abcd_bkp xyz:xyz_2 因此,如果我在上面的test.txt文件中使用abc,我需要abc_1;如果我通过了abcd,我需要abcd\u 1作为输出 我尝试了cat text.txt | grep abc | cut-d:“-f2,2,但是我得到了输出 abc_1 abcd_1 1_abcd_bkp 当我只需要abc_1时

我有一个如下所述的文本文件,同时我将传递一个输入,我想要相应的输出

输入文件:
test.txt

abc:abc_1
abcd:abcd_1
1_abcd:1_abcd_bkp
xyz:xyz_2
因此,如果我在上面的test.txt文件中使用
abc
,我需要
abc_1
;如果我通过了
abcd
,我需要
abcd\u 1
作为输出

我尝试了
cat text.txt | grep abc | cut-d:“-f2,2
,但是我得到了输出

abc_1
abcd_1
1_abcd_bkp
当我只需要
abc_1

时,您需要将a与
-e
开关一起使用。 特别是,正则表达式允许您使用插入符号(
^
)来表示行的开头

由于您只关心
abc
,当它位于行的开头,后面跟着
,因此您需要:

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

abc_1
救命啊

awk -F: -v key="abc" '$1==key{print $2}'
使用
作为分隔符,查找字段1上的键以返回字段2

或者,通过在脚本中移动关键点

awk -F: '$1=="abc"{print $2}'
使用GNU grep:

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

abc_1 abc_1
\K
将迄今为止匹配的文本保留在整个正则表达式匹配之外


您可以尝试排除-v:

cat text.txt | grep abc |grep-vi abc[a-z]


不确定这是否正确,请尝试使用这种想法,但不指定要打印的第二个字段整行或在其他情况下为行

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

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

你的意思是(用下划线)这样做吗
cat text.txt | grep abc | cut-d:“-f2,2
能否添加一个解释,例如文档链接?我没有链接,但考虑到字段分隔符,因为冒号和abc匹配第一行打印第二个字段。请将其添加到您的答案中。与@karakfa的答案类似的描述会很好。谢谢