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
)。
考慮到要提取語句內括號的內容
if ($remote_addr ~ ( ... ) )
,以下awk
程序應該:awk 'index($0,"$remote_addr"){sub(/^.*\(/,"");sub(/\).+$/,"");print}' inputfile
這將匹配包含字元串的行
$remote_addr
。在該行中,它將刪除從 start-of-line 到 last 的(
所有內容,以及從 first)
到 end-of-line 的所有內容。然後它在行上列印剩餘的值。
由於它是單行的簡單替換,因此我只使用 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