2013-10-06 73 views
0

我是新来的sed,我试图找出一种方法来删除超过6个字符的文本中的单词。使用sed删除大于6个字符的所有单词

到目前为止我已经想出了这个,但它只是给了我一个空文件。

sed -n '/.\{6\}/!d' input > output 

输入

但它是sed的管道中,其尤其是从其他类型的编辑区分开来过滤文本的能力。

所需的输出

但它是sed的在它与其他类型的文本。

+0

从根本上说,'sed'是面向行。你的脚本将删除任何不符合正则表达式的*行*。幸运的是,/// g'允许你用一行代替所有匹配。 – tripleee

回答

1

这应该做的伎俩,除去有多于6个字母的单词 - 如果你定义一个字成由字母A-Z和A-Z:

sed -e s'/[A-Za-z]\{7,\}//g' 
+0

这一个也适用。 你“告诉”sed要在[A-Za-z] \ {7,\}部分做什么? –

+0

恩,删除7个字符或更长的单词吗?也就是说,用正则表达式替换正则表达式中的任何匹配。 – tripleee

2

你尝试

sed -r 's/\b\w{6,}\s?\b//g' 

对于示例:

$ echo "But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors." | sed -r 's/\b\w{6,}\s?\b//g' 
But it is sed's to text in a which it from other types of . 

编辑:上面会删除那些6个字符或更长话。您可能需要在上述表达式中修改{6,}以满足您的需求。

+0

它工作完美。谢谢。 你能解释我sed在做什么吗? –

+0

\ b表示一个字边界。 \ w表示单词字符。 \ s?将匹配单词后的可选空间。 – devnull