Sed删除包含多个单词的行,不包括搜索词

时间:2014-10-16 11:45:22

标签: bash unix sed

我目前正在尝试编写一个搜索文件的sed命令,并删除文件中包含多个单词的行。但是,我需要它来排除删除以特定符号开头的行(使用" [")

这是我到目前为止(这不包括排除一行的代码,只是删除包含多个单词的行):

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

我想用这样的东西来排除以左括号开头的搜索行(" ["):

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

但是,我收到此错误:

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

我确定这是一件小而荒谬的事情。有人能帮忙解决这个问题吗?欢呼声。

4 个答案:

答案 0 :(得分:3)

awk命令会更简单:

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

awk只会打印少于两个单词的行或以[开头的单词

答案 1 :(得分:1)

通过sed,

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

答案 2 :(得分:0)

我不确定你的命令,但是下面会做的伎俩:

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

答案 3 :(得分:0)

这可能适合你(GNU sed):

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

删除不以[开头并且不止一个字的行。