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すると、estコマンドはラベルを付けるために分岐し、行の先頭にパターンが表示されなくなるまで操作を再実行して完了します。st1ab

答え3

リバース文字列を処理する方が簡単かもしれません。これにより、最初のイベントを除くすべての(リバース)イベントを削除できます。

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

文字列がパターンで始まらない場合でも機能します。

関連情報