正規表現に一致する文字列の一部を抽出したいと思います。正しく実行される次のコードを考えてみましょう。
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にその行を印刷し、一致するものがあれば置き換えるように指示します。