2015-09-25 93 views
-1

我有一個如下所述的文本文件,並且我將傳遞一個我希望得到相應輸出的輸入。grep命令不能像我期望的那樣工作

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

+0

你的意思是這樣做(與下劃線)? 'cat text.txt | grep abc_ | cut -d「:」-f2,2' –

+0

關於詢問和投票,請閱讀http://stackoverflow.com/help/someone-answers。謝謝 – Cyrus

回答

1

隨着GNU grep的移動鍵:

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

輸出:

 
abc_1 

\K保持至今匹配了整體正則表達式匹配的文本。

1

您想將regular expression-e開關一起使用。 特別是,正則表達式允許您使用插入符號(^)來表示行的開始。

既然你只關心abc當它在一行的開始,它的後面:,你想:

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

輸出:

abc_1 
1

awk來救援!

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

使用:作爲分隔符做了查找關鍵現場1回場2

或者,在腳本

awk -F: '$1=="abc"{print $2}' 
1

你可以嘗試排除-v:

貓的text.txt | grep abc | 的grep -VI ABC [A-Z]

不知道這會工作完全,嘗試用那種想法

1

的東西如果不指定要打印的整個行會或在其他情況下,行第二場。

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

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

您能否添加一個解釋,例如請鏈接到文檔? –

+0

我沒有鏈接,但考慮到字段分隔符作爲冒號和abc匹配第一行打印第二個字段。 –

+0

請將它添加到您的答案中。類似於@ karakfa的回答的描述會很好。謝謝。 –

相關問題