sed 从行中删除所有开始模式匹配

Dan*_*Dan 12 sed

我有以下几行:

abababtestab
Run Code Online (Sandbox Code Playgroud)

我试图找出一个sed表达式来ab从行的开头删除所有出现的,因此转换后的行应该是:

testab
Run Code Online (Sandbox Code Playgroud)

我觉得这应该很简单,但我真的对sed.

到目前为止我所拥有的是:

sed 's/^ab//'
Run Code Online (Sandbox Code Playgroud)

但这只会删除第一次出现的 ab。

mik*_*erv 17

sed 's/^\(ab\)*//' <in >out
Run Code Online (Sandbox Code Playgroud)

你应该把它分组。

echo ababababtestab |
sed 's/^\(ab\)*//'
Run Code Online (Sandbox Code Playgroud)
testab
Run Code Online (Sandbox Code Playgroud)

不过,一些年长的seds可能无法很好地处理。尽管子表达式重复是BRE的POSIX 指定特性,但某些seds 不能正确支持它。但在其中一些...

testab
Run Code Online (Sandbox Code Playgroud)

...可能会起作用。


cuo*_*glm 6

另一个sed

sed -e ':1' -e 's/^ab//;t1'
Run Code Online (Sandbox Code Playgroud)

对于每一行输入,我们设置一个标签:1,然后s在行首进行替换ab。如果s替换成功,test 命令分支到 label 1,重做工作直到行首没有ab模式出现,我们就完成了。