代码之家  ›  专栏  ›  技术社区  ›  scribe

插入符号regexp在mawk中不产生输出

  •  0
  • scribe  · 技术社区  · 4 年前

    我正在尝试打印所有文件 /usr/bin/ 其中文件名以 v .这很有效,

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

    令人惊讶的是,这不会返回任何输出,

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

    我不明白有什么区别。我在跑步 Ubuntu 21.10 具有 awk -W version 说它是开着的 1.3.4 20200120 .

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

    1 回复  |  直到 4 年前
        1
  •  1
  •   Andreas Louv    4 年前

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

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

    写作时:

    /pattern/ { ... }
    

    这和写作一样

    $0 ~ /pattern/ { ... }
    

    但在你的例子中,你想比较第9列,所以写下它。


    但你真的不想为此创建一个管道,如果你的文件包含一个空间,会发生什么?

    你可以考虑使用 find 或者是地球仪:

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

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