sedを使用せずに遅延評価を取得する

sedを使用せずに遅延評価を取得する

「a」が表示されると予想しましたが、なぜ「a:b」なのか?

$ echo "a:b:c" | sed -E 's/(.+?):.+/\1/'
a:b

ベストアンサー1

ほとんどのバージョンはsedPerlスタイルの正規表現をサポートしていません。 (私の知る限りサポートしている唯一のバージョンは「super sed」です。SSD(2005年以降は更新されません)、?非greedy修飾子はサポートされていません。

正確な正規表現を使用するには、最も簡単な解決策は次を使用することですperl

$ echo "a:b:c" | perl -pe 's/(.+?):.+/$1/'
a

それ以外の場合は、一致するすべての文字をキャプチャするように正規表現を変更します。とは別にコロン:

$ echo "a:b:c" | sed -E 's/([^:]+):.+/\1/'
a

おすすめ記事