AWKを使用して特定の文字列の前にある角かっこ間の値を抽出する方法

AWKを使用して特定の文字列の前にある角かっこ間の値を抽出する方法

awk式を使用して、角かっこ間のすべての値をキャプチャできます。

'NR>1{print $1}' RS='(' FS=')'

しかし、具体的に一致するのに問題があります。行番号ではなく文字列に一致させたい。 awkがこれを行うことができるかどうかはわかりません。

元のファイルの内容は

if ($remote_addr ~ ^(1.2.3.4|5.6.7.8)$) {
    set $maintenance off;
}

if ($maintenance = on) {
    return 503;
}

さまざまな順序で複数の括弧があります。

1.2.3.4|5.6.7.8この行からコンテンツを抽出する必要があります。

if ($remote_addr ~ ^

(または含まれている行のみ$remote_addr)。

ベストアンサー1

1行で簡単に交換できるので、sedを使って行います。

$ sed -n 's/.*$remote_addr[^(]*(\([^)]*\).*/\1/p' file
1.2.3.4|5.6.7.8

本当にawkを使いたいなら、どんなawkでも使うことができます:

$ awk 'sub(/.*\$remote_addr[^(]*\(/,"") && sub(/).*/,"")' file
1.2.3.4|5.6.7.8

おすすめ記事