
「a」が表示されると予想しましたが、なぜ「a:b」なのか?
$ echo "a:b:c" | sed -E 's/(.+?):.+/\1/'
a:b
答え1
ほとんどのバージョンはsed
Perlスタイルの正規表現をサポートしていません。 (私の知る限りサポートしている唯一のバージョンは「super sed」です。SSD(2005年以降は更新されません)、?
非greedy修飾子はサポートされていません。
正確な正規表現を使用するには、最も簡単な解決策は次を使用することですperl
。
$ echo "a:b:c" | perl -pe 's/(.+?):.+/$1/'
a
それ以外の場合は、一致するすべての文字をキャプチャするように正規表現を変更します。とは別にコロン:
$ echo "a:b:c" | sed -E 's/([^:]+):.+/\1/'
a