Bash脚本-在某个短语之后立即使用条目
在我的项目中,addgpg apt(https://launchpad.net/addgpg-apt),我希望能够将输入发送到程序中。根据该输入,说…Bash脚本-在某个短语之后立即使用条目,bash,scripting,Bash,Scripting,在我的项目中,addgpg apt(https://launchpad.net/addgpg-apt),我希望能够将输入发送到程序中。根据该输入,说… 无法验证PPA中的签名。检查是否已修复:无公开密钥 ... 如何使用basic Bash、grep等从字符串中获取,并忽略字符串中的所有其他内容?(请注意,这些错误是由apt get/apt生成的,因此字符串的结尾总是NO\u PUBKEY) 在Java中,这可以通过子字符串来完成,并根据短语NO_PUBKEY的位置仅获取PGPkeyID,但我希
无法验证PPA中的签名。检查是否已修复:无公开密钥
... 如何使用basic Bash、grep等从字符串中获取
,并忽略字符串中的所有其他内容?(请注意,这些错误是由apt get
/apt
生成的,因此字符串的结尾总是NO\u PUBKEY
)
在Java中,这可以通过子字符串来完成,并根据短语NO_PUBKEY
的位置仅获取PGPkeyID,但我希望这只能在Bash中完成,因此任何解决方案都将受到欢迎。管道到grep-o“NO_PUBKEY”| sed-e's/*/\1/'
将为您提供:
PGPkeyID
更新 假设您的输入如下: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY CAFE0123DEADBEEF The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0123DEADBEEFCAFE The following signatures couldn't be verified because the public key is not available: NO_PUBKEY DEADBEEFCAFE0123 The following signatures couldn't be verified because the public key is not available: NO_PUBKEY BEEFCAFE0123DEAD The following signatures couldn't be verified because the public key is not available: NO_PUBKEY CAFE0123DEADBEEF 像这样: 0123DEADBEEFCAFE BEEFCAFE0123DEAD CAFE0123DEADBEEF DEADBEEFCAFE0123 0123准备好了吗 Beefcafe0123死亡 咖啡牛肉
DEADBEEFCAFE0123您可以在纯shell中执行此操作,而无需生成进程:
cat << EOF > file
...
Unable to verify signatures in PPA. Check that this is fixed: NO_PUBKEY <PGPkeyID1>
...
Unable to verify signatures in PPA. Check that this is fixed: NO_PUBKEY <PGPkeyID2>
...
EOF
cat file | while read line; do
if [[ $line == *\ NO_PUBKEY\ * ]]
then
echo ${line#* NO_PUBKEY }
fi
done
cat文件
...
无法验证PPA中的签名。检查是否已修复:无公开密钥
...
无法验证PPA中的签名。检查是否已修复:无公开密钥
...
EOF
cat文件|在读取行时;做
如果[[$line=*\NO\u PUBKEY\*]]
然后
echo${line#*NO_PUBKEY}
fi
完成
+1您可以将grep功能放在sed脚本中保存在管道上:sed-e'/NO\u PUBKEY/s/*/*/\1/'
。但是,如果OP真的想在字符串的末尾加上“”,那么grep-o']\+>$”
就足够了。@MattH假设我有15行类似的代码,那么我可以通过这15行吗,还是应该通过这一行和其他项来传递呢?@glennjackman是的,PGPkeyID只用于脚本。。。它会从密钥服务器手动获取指定的PGPkeyID,因此这是唯一需要的返回。@邪恶的凤凰:如果你有一堆输出,偶尔会有与你建议的匹配的行。我建议您使用sort-u
对输出进行过滤,以消除重复项。由于某些原因,这不起作用。它不会分离出实际的钥匙。只需注意,这是一个占位符,实际上只有一个十六进制字符串表示位置。
cat << EOF > file
...
Unable to verify signatures in PPA. Check that this is fixed: NO_PUBKEY <PGPkeyID1>
...
Unable to verify signatures in PPA. Check that this is fixed: NO_PUBKEY <PGPkeyID2>
...
EOF
cat file | while read line; do
if [[ $line == *\ NO_PUBKEY\ * ]]
then
echo ${line#* NO_PUBKEY }
fi
done