2015-07-06 224 views
1

我想提取所有以「B」開頭並以「3」結尾的字符串。所有的字符串都可以在「input.txt」文件中找到。匹配字符串模式

我使用這個sed命令,但它提取錯誤的結果。任何人都可以幫助我嗎?

sed -n '/^B*3$/p' input.txt 

Sample_input:

Boby3 
apple2 
BUbbly3 
Banana3 
youas5 
BUBLY3 
BUb2 

Sample_output:

Boby3 
BUbbly3 
Banana3 
BUBLY3 
+0

你是指一條線嗎?前者會更好。 –

+0

不符合線。只有文字。示例Bubbles3,Bob3, – Bubbles

+0

編輯您的問題以顯示幾行樣本輸入和預期輸出。 –

回答

2

這應該工作:

grep -oE "\bB[^[:space:]]+3\b" file 

將B和3

如果你之間的匹配所有字符(包括特殊字符和不計空格)只想匹配單詞字符:

grep -oE "\bB\w+3\b" file 

-o選項僅適用於只匹配(僅返回匹配的字符串)。

-E適用於Extended Regex。

注意:假定至少有一個字符必須在B3之間。如果不是(即,如果B3應匹配),請將+的正則表達式更改爲*

+0

\ b用於什麼? – Bubbles

+0

@ Bubbles Word boundary – Jahid

+0

以上不會匹配字符串'B3' - 是期望的行爲嗎? –

1

單獨的grep來sufficien提取的話。

grep -oP '\bB\w*3\b' file 

grep -oP '(?<!\S)B\S*3(?!\S)' file 
+0

對不起,即使沒有取得結果。我得到NULL設置 – Bubbles

+0

grep會很好,。 –

+5

這裏我們再來看看:'\ b'和'\ w'是PCRE語法,'grep'只接受BRE。 – lcd047