awk-通过变量搜索模式

awk-通过变量搜索模式,awk,Awk,我们已经为多文件名搜索模式编写了shell脚本 文件格式: <number>_<20180809>.txt 如果sting匹配,则返回值。您可以通过以下方式更改命令,命令将正常工作: awk -v string='12_1234' -v search='^[0-9]+_+[0-9][0-9][0-9][0-9]$' 'BEGIN{ if (string ~ search) print string }' 12_1234 如果您使用~运算

我们已经为多文件名搜索模式编写了shell脚本

文件格式:

<number>_<20180809>.txt

如果sting匹配,则返回值。

您可以通过以下方式更改命令,命令将正常工作:

awk -v string='12_1234' -v search='^[0-9]+_+[0-9][0-9][0-9][0-9]$' 'BEGIN{ if (string ~ search) print string }'                
12_1234
如果您使用
~
运算符,并且您还有一个额外的
$
,则不需要为regex使用
/…/
语法。你真的很接近

然后,您必须将搜索正则表达式调整为
^[0-9].[0-9]{8}$以完全匹配您的
\`模式

此外,如果您只是从文件中提取此信息,则可以使用
grep

$ awk -v string='1_12345678' -v search='^[0-9]_[0-9]{8}$' 'BEGIN{ if (string ~ search) print string }'                           
1_12345678

$ (search='^[0-9]_[0-9]{8}$'; echo '1_12345678')| grep -oE "$search"
1_12345678

@埃德蒙顿:谢谢你,埃德,你完全正确固定的!
$ awk -v string='1_12345678' -v search='^[0-9]_[0-9]{8}$' 'BEGIN{ if (string ~ search) print string }'                           
1_12345678

$ (search='^[0-9]_[0-9]{8}$'; echo '1_12345678')| grep -oE "$search"
1_12345678