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

带有正斜杠作为补全括号表达式的Awk搜索模式

  •  0
  • Hotschke  · 技术社区  · 9 年前

    考虑以下数据:

    # comments
    files-with-relative-paths1
       files-with-relative-paths2
    /files-with-absolute-paths1
       /files-with-absolute-paths2
    

    我只想匹配具有相对路径的文件名的行,即没有前导 / (可以存在前导空格)使用 awk 。我已尝试以下命令:

    $ awk '/^\s*[^/]/' testfile.txt
    # comments
    files-with-relative-paths1
       files-with-relative-paths2
       /files-with-absolute-paths2
    
    $ awk '/^[^#]\s*[^/]/' testfile.txt
    files-with-relative-paths1
       files-with-relative-paths2
    /files-with-absolute-paths1
       /files-with-absolute-paths2
    

    正如你所看到的,他们没有给出正确的结果

    3 回复  |  直到 9 年前
        1
  •  0
  •   Vijay    9 年前

    如果您可以使用perl:

    perl -lne 'print unless(/^\s*\//)' your_file
    
        2
  •  0
  •   Hotschke    9 年前

    我没有注意到 ! 标志在 awk 这使得它更容易:

    awk '!/(^#)|(^\s*[/])/' testfile.txt
    

    这个 documentation 没有为标准模式澄清这一点。

        3
  •  0
  •   Ed Morton    9 年前

    假设您的文件名都不能以 # :

    $ awk '$1 ~ /^[^#/]/' file
    files-with-relative-paths1
       files-with-relative-paths2