匹配共享常见的空白问题

时间:2016-10-07 00:09:11

标签: regex bash awk sed

长话短说,我想删除一个带有相应空格的单词

需要: abc test test def - > abc def

可是: abc xtest xtest def - > abc xtest xtest def(请记住)

我试过了:

$ echo "abc test test def" | sed "s/\s\<test\>\s/ /g"
abc test def

所以,如果我将这个正则表达式应用2次,我将得到我需要的东西。但有没有办法在没有 sed 循环的情况下如何做到这一点?

Matches share common whitespace pic

1 个答案:

答案 0 :(得分:2)

echo "abc test test def" | sed "s/\s\(\<test\>\s\)*/ /g"

=&gt; abc def

echo "abc test test def test " | sed "s/\s\(\<test\>\s\)*/ /g"

=&gt; abc def

这会查找空格\s,后跟可能重复的小组\<test\>\s 通过寻找一个重复次数不确定的组,我们可以处理只有一个test的情况,并处理相邻test test的特殊情况。