Как извлечь значение между скобками там, где перед ними находится определенная строка с помощью AWK

Переменные не раскрываются внутри одинарных кавычек. Вам нужно заключить его в двойные кавычки:

ff() {
    find. -type f -name "$1"
}

Вы искали буквальную строку$1


Примечание. :Вы также должны указать свой аргумент командной строки, чтобы *не расширялось до имени файла в вашем pwd.

ff "*.so"

См.:Цитирование

0
01.09.2021, 08:46
3 ответа

Поскольку это простая замена в одной строке, я бы просто использовал для этого 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
3
01.09.2021, 11:01

Вы также можете попробоватьsed

sed -En '/\$remote_addr/ s/.*\(([0-9.]*\|[0-9.]*)\).*/\1/p' $file

Он будет соответствовать любой строке с $remote_addr, а затем извлечет совпадение.

Код должен иметь возможность сопоставлять шаблон без предварительного явного сопоставления $remote_addr.

sed -En 's/.*\(([0-9.]*\|[0-9.]*)\).*/\1/p' $file

Выход

1.2.3.4|5.6.7.8
0
01.09.2021, 13:48
awk '/\$remote_addr/{for(i=1;i<=NF;i++){if($i ~ /\([0-9].*|[0-9].*\)/){print $i}}}' filename|awk -F "(" '{gsub(/\).*/,"",$2);print $2}

выход

1.2.3.4|5.6.7.8
-3
02.09.2021, 19:29

Теги

Похожие вопросы