我正在尝试查看用户是否创建了具有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而不是任何其他命令,我怎样才能使它工作。提前谢谢。
答案 0 :(得分:2)
Mac OS X awk
(BSD 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())