【发布时间】:2016-05-13 13:18:00
【问题描述】:
我正在尝试查看用户创建的文件是否具有 LX***** 模式,其中 * 都是数字。我正在使用 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,而不是任何其他命令,我怎样才能使它工作。提前致谢。
【问题讨论】:
-
第二个
awk脚本对我有用——在 Mac OS X 10.11.4 上使用 BSD Awk 和 GNU Awk (4.1.3)。 (给定LX99999 D E F,它打印LX99999 F;给定LX8888 A B C和LX000000 X Y Z,它什么也没打印。)您在哪个平台上使用哪个版本的Awk?请注意,如果您愿意,可以使用awk '$1 ~ /^LX[0-9]{5}$/ {print $1"\t"$4}' -
GNU Awk 3.1.7 :( @JonathanLeffler。感谢您提供的信息。
-
我的机器上碰巧有 GNU Awk 3.1.7 的源代码,所以我编译它并确认它不能识别 GNU Awk 4.1.3 识别的模式。如果您希望符号工作,是时候升级了。
-
RE 间隔在 gawk 4.0 之前默认被禁用(以前你需要
--re-interval来启用它们)。获取新版本的 gawk,因为您当前的版本已经过时了几年,并且您缺少大量非常有用的功能(请参阅 gnu.org/software/gawk/manual/gawk.html#Feature-History)