例如我有这样的文件:
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
答案 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