删除文本文件中少于3个单词的行

时间:2014-09-17 05:43:49

标签: linux bash unix awk sed

我已经看到过诸如使用sed根据字符数而不是单词删除行的命令。

例如。我有一个文本文件,如

word1
word1 word2
word1 word2 word3
word1 word2 word3 word4
word1 word2 word4 word5

我如何使用(sed或awk)删除少于3个单词的行,因此输出如下:

word1 word2 word3
word1 word2 word3 word4
word1 word2 word4 word5

5 个答案:

答案 0 :(得分:4)

以下是使用awk执行此操作的方法,如果其超过2个字段,请将其打印出来:

awk 'NF>2' file
word1 word2 word3
word1 word2 word3 word4
word1 word2 word4 word5

答案 1 :(得分:4)

你可以在awk中完成这个,

$ awk 'NF>=3' file
word1 word2 word3
word1 word2 word3 word4
word1 word2 word4 word5

打印包含三个或更多字段的行。

答案 2 :(得分:1)

您可以尝试sed命令

sed -n 's/\([^ ]\+ \)\{2,\}/&/p' file_name

[^ ] - until space match each characters
{2,} - which is used to match the preceding pattern more than 2
([^ ]\+ ) - Which is used to match the word.

答案 3 :(得分:1)

sed -n '/[^ ]\([^ ]*  *[^ ]\)\{2\}/ p' YourFile
# or
sed -n '/[^ ]  *[^ ][^ ]*  *[^ ]/ p' YourFile

Regx是:至少1个非空格,至少有1个空格,至少有1个非空格,至少有1个空格,至少有1个非空格

确保(word1 word2)没有将字母空间作为单词分隔符,而没有任何单词在四肢上分开

答案 4 :(得分:1)

这可能适合你(GNU sed):

sed -n 's/\<//3p' file