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

grep command not working as my expectation

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

输入文件: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.

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

因为您只关心 abc 位于一行的开头且后面跟着 :,所以您需要:

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

输出:

abc_1

awk 来拯救!

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

使用 : 作为分隔符查找字段 1 到 return 字段 2 上的键。

或者,通过移动脚本中的键

awk -F: '=="abc"{print }'

使用 GNU grep:

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

输出:

abc_1

\K keeps the text matched so far out of the overall regex match.

你可以试试exclude -v:

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

不确定这是否有效,请尝试使用这种想法

如果不指定要打印的第二个字段,整行将是或在其他情况下是行。

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

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