awk - 通过变量搜索模式

时间:2018-06-14 05:35:47

标签: awk

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

文件格式:

(a-b)

单个号码开头,以 8位号码结尾

命令:

<number>_<20180809>.txt

如果sting匹配则返回值。

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式更改命令,它将起作用:

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

如果您使用/.../运算符,并且还有一个额外的~,则无需使用$语法进行正则表达式。你真的很亲密!

然后,您必须将搜索正则表达式调整为^[0-9]_[0-9]{8}$ to match exactly your _&lt; 20180809&gt;`模式。

此外,如果您只是从文件中提取此信息,则可以使用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