2014-10-16 68 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 

删除不[开始,超过一个字线。