Unix - 在行的开头grepping一个值

时间:2014-07-27 02:46:13

标签: unix

有一个如下数据,我试图取每行的第四个值(由:)分隔为第一个值。  但是,由于第二行中的第一个值也可用,因此它给出了如下问题。

$ cat sample.txt 
MSG_KENAN_KBILLDT1:mulconfield:lt,ge,ge,ge,ge,ge:MSG_KENAN_KPAYDDT1 MSG_KENAN_KBILLDT2 MSG_KENAN_KBILLDT3 MSG_KENAN_KBILLDT4 MSG_KENAN_KBILLDT5 MSG_KENAN_KBILLDT6 
MSG_KENAN_KBILLDT3:mulconfield:le,ge,ge,ge:MSG_KENAN_KPAYDDT3 MSG_KENAN_KBILLDT4 MSG_KENAN_KBILLDT5 MSG_KENAN_KBILLDT6
$

$ grep MSG_KENAN_KBILLDT3 sample.txt|cut -d: -f4
MSG_KENAN_KPAYDDT1 MSG_KENAN_KBILLDT2 MSG_KENAN_KBILLDT3 MSG_KENAN_KBILLDT4 MSG_KENAN_KBILLDT5 MSG_KENAN_KBILLDT6
MSG_KENAN_KPAYDDT3 MSG_KENAN_KBILLDT4 MSG_KENAN_KBILLDT5 MSG_KENAN_KBILLDT6
$

您也可以在第一行看到MSG_KENAN_KBILLDT3。我只需要在第一个位置有我的搜索字符串的行。

但是我的预期输出是

MSG_KENAN_KPAYDDT3 MSG_KENAN_KBILLDT4 MSG_KENAN_KBILLDT5 MSG_KENAN_KBILLDT6

因为我想在第一个位置根据值(MSG_KENAN_KBILLDT3)获得第四个值。

有人能给我一个解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果您想在行首开始使用MSG_KENAN_KBILLDT3,请说明:

grep '^MSG_KENAN_KBILLDT' sample.txt

开头的插入符号^表示如果以下模式出现在该行的开头,则为

答案 1 :(得分:0)

作为替代方案,您可以尝试使用awk

awk '{ if ($1 == "MSG_KENAN_KBILLDT3") {print $4}  }' FS=":" sample.txt