带有正斜杠作为补充括号表达式的 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
考虑以下数据:
# 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