有点模糊的标题,但基本上我需要做的是从这个错误消息中复制公钥:
W: GPG error: http://ppa.launchpad.net hardy Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EED4D034D81367B9
并将其用作脚本其余部分的值以修复错误。我查看了如何使用 Grep、awk、sed 和其他一些工具来执行此操作,但它们都涉及从文件读取输入,而不是从标准输出中读取内联。
如有任何帮助,我们将不胜感激!
最佳答案
您可以结合使用 bash
工具和 xargs
来实现这一点。假设您从命令中收到错误字符串,您可以使用 波浪号 (=~)
运算符将其通过管道传输到 bash
中的 regEx
。
.*\ ([[:alnum:]]+)$
即使用此 regEx
对字符串进行简单的 echo
您将获得所需的键值。在命令行运行以下命令
$ echo "W: GPG error: http://ppa.launchpad.net hardy Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EED4D034D81367B9" | while IFS= read -r line; do [[ $line =~ .*\ ([[:alnum:]]+)$ ]] && printf "%s\n" "${BASH_REMATCH[1]}"; done
EED4D034D81367B9
即形式
$ <command-returning-string> | while IFS= read -r line; do [[ $line =~ .*\ ([[:alnum:]]+)$ ]] && printf "%s\n" "${BASH_REMATCH[1]}"; done
现在正如您所说,您想将此 key 传递给管道中的另一个命令。现在 xargs
来拯救了。使用 xargs
中的 -I{}
标志,{}
成为从上一个命令返回的 key 的占位符,即 key 是现在出现在 {}
中,可以作为参数/输入传递给您的下一个命令作为
$ <command-returning-string> | <command-returning-key> | xargs -I{} <your-next-command> {}
关于linux - 从错误中复制最后一个词并输入到下一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41000960/