2013-10-06 70 views
0

我是新來的sed,我試圖找出一種方法來刪除超過6個字符的文本中的單詞。使用sed刪除大於6個字符的所有單詞

到目前爲止我已經想出了這個,但它只是給了我一個空文件。

sed -n '/.\{6\}/!d' input > output 

輸入

但它是sed的管道中,其尤其是從其他類型的編輯區分開來過濾文本的能力。

所需的輸出

但它是sed的在它與其他類型的文本。

+0

從根本上說,'sed'是面向行。你的腳本將刪除任何不符合正則表達式的*行*。幸運的是,/// g'允許你用一行代替所有匹配。 – tripleee

回答

1

這應該做的伎倆,除去有多於6個字母的單詞 - 如果你定義一個字成由字母A-Z和A-Z:

sed -e s'/[A-Za-z]\{7,\}//g' 
+0

這一個也適用。 你「告訴」sed要在[A-Za-z] \ {7,\}部分做什麼? –

+0

恩,刪除7個字符或更長的單詞嗎?也就是說,用正則表達式替換正則表達式中的任何匹配。 – tripleee

2

你嘗試

sed -r 's/\b\w{6,}\s?\b//g' 

對於示例:

$ echo "But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors." | sed -r 's/\b\w{6,}\s?\b//g' 
But it is sed's to text in a which it from other types of . 

編輯:上面會刪除那些6個字符或更長話。您可能需要在上述表達式中修改{6,}以滿足您的需求。

+0

它工作完美。謝謝。 你能解釋我sed在做什麼嗎? –

+0

\ b表示一個字邊界。 \ w表示單詞字符。 \ s?將匹配單詞後的可選空間。 – devnull