删除特定字符之间的空格以及相邻的出现

时间:2018-08-15 13:33:16

标签: regex string bash sed replace

当两个感叹号“!”之间出现空格时,我正在尝试删除空格。

例如,我尝试过:

echo 'this is ! a repeated ! ! ! ! character ! ! ! here ! !' | sed 's/! !/!!/g'

所需的输出将是:

this is ! a repeated !!!! character !!! here !!

但是我得到了这个:

this is ! a repeated !! !! character !! ! here !!

一种方法是重复执行sed命令,但实际上我可以有任意数量的'!'。在我的输入中,我想不出一种干净的方法来做到这一点。

2 个答案:

答案 0 :(得分:3)

使用Perl的环顾断言:

 perl -pe 's/!\s+(?=!)/!/g' 

(?=!)的意思是“后跟一个感叹号,但不要在匹配的字符串中包含感叹号,并在它之前 之前开始下一个匹配”。

答案 1 :(得分:2)

使用sed可以循环播放:

echo 'this is ! a repeated ! ! ! ! character ! ! ! here ! !' |
sed -e :a -e 's/! !/!!/g;ta'

this is ! a repeated !!!! character !!! here !!