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

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

我有以下几行:

abababtestab

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

testab

我觉得这应该很简单,但我真的什么都不知道sed

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

sed 's/^ab//'

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

答案1

sed 's/^\(ab\)*//' <in >out

你应该把它分组。

echo ababababtestab |
sed 's/^\(ab\)*//'

testab

一些sed年代不过,可能处理得不太好。虽然子表达式重复是POSIX 指定的BRE 的功能,有些sed系统不能正确支持它。但在其中一些...

echo abababtestab |
sed 's/^\(ab\)\1*//'

...可能会起作用。

答案2

其他sed

sed -e ':1' -e 's/^ab//;t1'

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

答案3

处理反转的字符串可能会更容易。这样您就可以删除除第一个之外的所有(反向)事件。

$ echo "abababtestab" |
rev | sed 's/ba//2g' | rev
testab

即使您的字符串不以该模式开头,这也将起作用。

相关内容