解析输出的特定部分

时间:2017-12-06 11:56:27

标签: bash

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

/usr/libexec/wifiFirmwareLoader -f

这将输出文件路径到其余脚本所需的正确文件,但我不想要整个路径,我只想要路径末尾的文件名。我怎么能解析这个?

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以在grep:

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

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

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