我正在尝试使用 awk 从程序的输出中提取文件路径。这是我第一次使用awk,我听说它对这种东西很好,所以我打开了GNU手册:https://www.gnu.org/software/gawk/manual/gawk.html (awk 符号链接(symbolic link)到我机器上的 gawk)
我正在尝试更改 FS 以使分隔符匹配任何非文件路径的内容。我在输入中硬编码 2 个文件路径的情况下进行了尝试:
awk -F '[^(\\/.)*]' '{print $1; print $2}'
我认为 [^(\\/.)*]
会将 FS 设置为匹配任何与文件路径不匹配的文本。我认为括号会阻止正则表达式被视为单个字符,例如[^abcd]
。路径可以任意长,因此有星号。这没有用。
我的输入看起来像这样:
一大堆随机垃圾哦!一个文件/opt/dir/file,也许还有一些垃圾和另一个文件!/usr/local/bin
我期望这样的输出:
/opt/dir/file
/usr/local/bin
我将在 Bash 变量中捕获这个预期的输出。
有谁知道如何正确地做到这一点?如果我通过了 --posix
命令,如果这是正确的,这也会有所帮助。注意:垃圾中可以存储任意数量的文件路径。
最佳答案
当您想从某些文本中提取特定模式时,请使用 grep。要查找所有包含斜杠的单词:
grep -o '[^[:blank:]]*/[^[:blank:]]*'
使用 GNU grep 的 pcre 模式更容易阅读:
grep -oP '\S*/\S*'
其中 \S
是 \s
的补码(空白)
关于regex - 在 awk 中更改 FS 以匹配任何不是文件路径的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50880071/