正则表达式正确但不适用于2字符单词的sed

时间:2014-06-10 09:15:00

标签: regex sed

我已经使用regex101.com和其他一些人来检查这是否正确而且似乎是这样。我想删除长度为两个字符的所有单词。我目前的实施是:

head -n 10 abstracts.txt | sed 's/ [a-zA-Z]{1,2} //g'

它只是没有做任何事情。我想从这样的事情出发:

  

这是一个简短的句子。

对此:

  

这句短句。

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

转义花括号并使用单词边界:

head -n 10 abstracts.txt | sed 's/ [a-zA-Z]\{1,2\}\b//g'

答案 1 :(得分:1)

不要使用空格使用\b作为字边界:

echo 'This is a short sentence' | sed -e 's/\b[a-zA-Z]\{1,2\}\b//g'
This   short sentence

答案 2 :(得分:0)

仅供测试,使用awk

awk '{for (i=1;i<=NF;i++) if (length($i)<3) $i="";gsub(/  +/," ")}1'
This short sentence.

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed -e 's/\b\w\w\?\b\s\+\|\s\+\w\w\?$//g' file

这将删除一行或前面的空格中的一个或两个字符单词和以下空格以及一行末尾的一个或两个字符单词。