如何在bash中使用命令sed显示具有一定数量单词的行

时间:2015-01-18 22:26:50

标签: bash unix sed

例如我有这样的文件:

Hel@@lo hi 123
if  a    equals  b
you
two three four
dany uri four 123
1 2 3333333

我需要该命令只打印包含3个单词的行 我试图在sed中编写命令,但不知怎的,它不能识别该行末尾的char $


sed '/.\+[ ]\+.\+[ ]\+[^ ]\+$/!d' $1

2 个答案:

答案 0 :(得分:0)

使用awk

awk 'NF==3' file.txt


$ cat file.txt
Hel@@lo hi 123
if  a    equals  b
you
two three four
dany uri four 123
1 2 3333333

$ awk 'NF==3' file.txt
Hel@@lo hi 123
two three four
1 2 3333333

答案 1 :(得分:0)

对原始代码进行小修改:

$ sed '/^[^ ]\+[ ]\+[^ ]\+[ ]\+[^ ]\+$/!d' file.txt 
Hel@@lo hi 123
two three four
1 2 3333333

以上将制表符视为单词字符,而不是空格。它还假设没有前导或尾随空格。

使用sed,但允许任何类型的空格并忽略一行上的前导和尾随空格:

$ sed -nr '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+[[:space:]]+[^[:space:]@]+[[:space:]]*$/p' file.txt
Hel@@lo hi 123
two three four
1 2 3333333

如果使用Mac OSX或其他BSD平台,请将-r替换为-E,如下所示:

sed -nE '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+[[:space:]]+[^[:space:]@]+[[:space:]]*$/p' file.txt