awk正则表达式无效

时间:2016-05-13 04:04:22

标签: bash awk

我正在尝试查看用户是否创建了具有LX *****模式的​​文件,其中*' s都是数字。我使用的是awk,但似乎不对。

这是有效的

<command_to_print_files> | awk '{ if ($1 ~ /^LX[0-9][0-9][0-9][0-9][0-9]$/) print $1"\t"$4}' 

这不是

<command_to_print_files> | awk '{ if ($1 ~ /^LX[0-9]{5}$/) print $1"\t"$4}'

为什么呢?如果我将使用awk而不是任何其他命令,我怎样才能使它工作。提前谢谢。

1 个答案:

答案 0 :(得分:2)

Mac OS X awkBSD awk)应该使用:

ls| awk '/^LX[0-9]{5}/ {print $1}'

<command_to_print_files> | awk '{ if ($1 ~ /^LX[0-9]{5}$/) print $1"\t"$4}'

但是GNU awk没有(verions&gt; 4确实支持它)。

要在正则表达式GNU awk中使用{},请使用--re-interval--posix

这应该适合你:

<command_to_print_files> | awk --re-interval '{ if ($1 ~ /^LX[0-9]{5}$/) print $1"\t"$4}'

ls| awk --re-interval '/^LX[0-9]{5}/ {print $1}'

注意(来自Ed Morton's评论):使用--re-interval而不是--posix,因为后者会禁用所有gawk扩展名(例如gensub())