插入符正则表达式在 mawk 中不产生任何输出

Caret regexp produces no output in mawk

我正在尝试打印 /usr/bin/ 中文件名以 v 开头的所有文件。这行得通,

ls -lA /usr/bin/ | awk '{print }' | grep ^v

奇怪,这个returns没有输出,

ls -lA /usr/bin/ | awk '/^v/ {print }'.

我不明白其中的区别。我是 运行 Ubuntu 21.10awk -W version 说它在 1.3.4 20200120.

编辑: 我知道 awk 可能不是完成我想在这里做的事情的最佳方式。但是,这是一个学习 awk 的练习,通过将它与实际输出进行比较来测试我的理解。

两条管道的区别在于,第一个输出第 9 列,然后检查它是否以 v 开头,第二个检查该行是否以 v 开头,将第二个更改为:

$ ls -lA /usr/bin/ | awk ' ~ /^v/ {print }'

写作时:

/pattern/ { ... }

写的一样

[=12=] ~ /pattern/ { ... }

但在你的情况下你想比较第 9 列,所以改为写它。


但您真的不想为此创建管道,如果您的文件包含 space 会怎样?

您可以考虑使用 find 或 glob:

$ printf '%s\n' /usr/bin/v*
/usr/bin/vi
/usr/bin/view
...

$ find /usr/bin -name 'v*' -print
/usr/bin/vi
/usr/bin/view
...