【问题标题】:Parsing specific parts of output [duplicate]解析输出的特定部分[重复]
【发布时间】:2018-05-20 07:14:37
【问题描述】:

基本上,我有这个脚本可以更新越狱设备 (iOS) 上的 wifi 固件。我需要检查这个的输出:

/usr/libexec/wifiFirmwareLoader -f

这会向我输出脚本其余部分所需的正确文件的文件路径,但我不想要整个路径,我只想要路径末尾的文件名。我该如何解析这个?

如果你需要一个例子,这就是输出的样子。

RESOLVED /usr/share/firmware/wifi/C748383-A3/hans.trx

我只想将hans.trx 存储在一个变量中。

【问题讨论】:

标签: bash


【解决方案1】:

您可以在 grep 中使用正则表达式:

echo "RESOLVED /usr/share/firmware/wifi/C748383-A3/hans.trx" | grep -Eo "[^/]+$"
  • -E 使用扩展的正则表达式。您也可以将 -P 用于 perl 正则表达式
  • -o 只显示匹配的输出
  • [^/] 匹配所有非 /,+ 使其至少为 1 个字符,$ 要求它位于行尾
  • 如果这与您需要的更多行匹配,您可以使用正向前瞻(?=something) 或正向后视something\K 使正则表达式更加严格(需要-P)。或者在某些情况下,我喜欢加倍 grep(首先 grep 用于包含某些内容的行,然后从您想要的行中获取部分)

您的最终脚本可能如下所示:

OUTPUT=$(/usr/libexec/wifiFirmwareLoader -f)
FILENAMES=$(echo "${OUTPUT}" | grep -Eo "[^/]+$")
echo "${FILENAMES}"

【讨论】:

    猜你喜欢
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2013-06-08
    • 1970-01-01
    • 2017-04-06
    • 2011-12-16
    相关资源
    最近更新 更多