我有以下几行:
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)
不过,一些年长的sed
s可能无法很好地处理。尽管子表达式重复是BRE的POSIX 指定特性,但某些sed
s 不能正确支持它。但在其中一些...
testab
Run Code Online (Sandbox Code Playgroud)
...可能会起作用。
另一个sed
:
sed -e ':1' -e 's/^ab//;t1'
Run Code Online (Sandbox Code Playgroud)
对于每一行输入,我们设置一个标签:1
,然后s
在行首进行替换ab
。如果s
替换成功,t
est 命令分支到 label 1
,重做工作直到行首没有ab
模式出现,我们就完成了。