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

Awk search pattern with forward slash as complemented bracket expression

考虑以下数据:

# 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

如您所见,它们没有给出正确的结果

我没有注意到 awk 中的 ! 标志,这使得它变得容易得多:

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

documentation 没有为标准模式阐明这一点。

如果您可以使用 perl:

perl -lne 'print unless(/^\s*\//)' your_file

假设您的 none 个文件名可以以 #:

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