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
我有一个如下所述的文本文件,同时我将传递一个我想要相应输出的输入。
输入文件: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