0

正規表現に関する興味深い問題に直面しています。これを小さな sed スクリプト (bash) 内で使用しています。

cities="new york;milan;rome;paris;london"
 echo ${cities} | sed 's/new.*;//'

これは次のように表示されます: London
基本的に、スクリプトは最後のセミコロンまですべてを置き換えますが、(new.*) に一致するものをセミコロンの最初の出現まで単純に削除したいのですが、何かアドバイスはありますか?

4

1 に答える 1

1

貪欲でない置換を行う必要があります。

sed 's/new[^;]*;//'

データ文字列がセミコロンで終わらない場合、これは機能しません。その場合、次のようなことができます。

sed 's/new[^;]*//g; s/;;/;/g; s/^;|;$//g'

編集

コメントで Ed が指摘したように、2 番目のソリューションは空のフィールドを保持しません。それが必要な場合、これは機能します(私がテストした限り):

sed 's/;?new[^;]*$|new[^;]*;//g'
于 2012-12-10T13:03:58.720 に答える