Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本-在某个短语之后立即使用条目_Bash_Scripting - Fatal编程技术网

Bash脚本-在某个短语之后立即使用条目

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,但我希

在我的项目中,addgpg apt(https://launchpad.net/addgpg-apt),我希望能够将输入发送到程序中。根据该输入,说…
无法验证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