我是新来的sed,我试图找出一种方法来删除超过6个字符的文本中的单词。使用sed删除大于6个字符的所有单词
到目前为止我已经想出了这个,但它只是给了我一个空文件。
sed -n '/.\{6\}/!d' input > output
输入
但它是sed的管道中,其尤其是从其他类型的编辑区分开来过滤文本的能力。
所需的输出
但它是sed的在它与其他类型的文本。
我是新来的sed,我试图找出一种方法来删除超过6个字符的文本中的单词。使用sed删除大于6个字符的所有单词
到目前为止我已经想出了这个,但它只是给了我一个空文件。
sed -n '/.\{6\}/!d' input > output
输入
但它是sed的管道中,其尤其是从其他类型的编辑区分开来过滤文本的能力。
所需的输出
但它是sed的在它与其他类型的文本。
这应该做的伎俩,除去有多于6个字母的单词 - 如果你定义一个字成由字母A-Z和A-Z:
sed -e s'/[A-Za-z]\{7,\}//g'
这一个也适用。 你“告诉”sed要在[A-Za-z] \ {7,\}部分做什么? –
恩,删除7个字符或更长的单词吗?也就是说,用正则表达式替换正则表达式中的任何匹配。 – tripleee
你尝试
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,}
以满足您的需求。
它工作完美。谢谢。 你能解释我sed在做什么吗? –
\ b表示一个字边界。 \ w表示单词字符。 \ s?将匹配单词后的可选空间。 – devnull
从根本上说,'sed'是面向行。你的脚本将删除任何不符合正则表达式的*行*。幸运的是,/// g'允许你用一行代替所有匹配。 – tripleee