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的答案类似的描述会很好。谢谢