2014-10-16 94 views
2

我正在嘗試編寫一個sed命令來搜索文件,並刪除文件中具有多個單詞的行。但是,我需要它來排除刪除以特定符號開頭的行(以「[」)Sed刪除含有多個單詞的行,不包括搜索詞

這是我到目前爲止(這不包括排除行的代碼,只是刪除與多個字線):

sed -E '/^\s*\S+\s*$/!d' $1 

我希望像這樣的東西去排除與左括號(「[」開始搜索線):

sed -E '/a/!d/^\s*\S+\s*$/!d' $1 

不過,我m得到這個錯誤:

sed: -e expression #1, char 6: extra characters after command 

我敢肯定這是一個小而荒謬的我錯過了。有人能夠幫助這個嗎?乾杯。

回答

3

awk命令會更簡單:

awk 'NF<2 || /(^|)\[/' file 

awk將只顯示有不到兩個詞或開始[

+0

完美的工作!應該更多地看待awk。非常感謝你! – Swanny 2014-10-16 12:20:59

+0

不客氣,很高興它解決了。 – anubhava 2014-10-16 12:22:54

1

通過sed的一個字打印線,

sed -n '/^ *[^ ]\+ \+[^ ]\+\|^ *\[/p' file 
0

我不確定你的命令,但以下將做的伎倆:

sed -E '/^\s*\S+\s*$|^\[/!d' $1 
0

這可能爲你工作(GNU SED):

sed '/^[^[]\S*\s\+\S/d' file 

刪除不[開始,超過一個字線。