sed は完全正規表現の一致と不一致を区別しません。

sed は完全正規表現の一致と不一致を区別しません。

正規表現に一致する文字列の一部を抽出したいと思います。正しく実行される次のコードを考えてみましょう。

regex="ss"
string="blossom"
echo $string | sed "s/^.*\($regex\).*$/\1/"

出力は次のとおりです

ss

ただし、正規表現に一致する項目がない場合は、文字列全体が返されます。

regex="aa"

出力:

blossom

これは正確ではありません。一致するものがない場合は何も返すべきではありません。これはどのように達成できますか?

ベストアンサー1

chorobが言うように、デフォルトでは、sedは常に一致する代替項目を持つ行を印刷します。あなたが望むことができます:

regex="ss"
string="blossom"
echo $string | sed -n "s/^.*\($regex\).*$/\1/p"

-nはsedにその行を印刷しないように指示し、s /コマンドの最後にあるpはsedにその行を印刷し、一致するものがあれば置き換えるように指示します。

おすすめ記事