Переменные не раскрываются внутри одинарных кавычек. Вам нужно заключить его в двойные кавычки:
ff() {
find. -type f -name "$1"
}
Вы искали буквальную строку$1
Примечание. :Вы также должны указать свой аргумент командной строки, чтобы *
не расширялось до имени файла в вашем pwd
.
ff "*.so"
См.:Цитирование
Поскольку это простая замена в одной строке, я бы просто использовал для этого 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
Вы также можете попробовать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
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