如何从shell脚本中较长的混合字符串中提取JSON字符串
给定以下字符串:如何从shell脚本中较长的混合字符串中提取JSON字符串,json,shell,awk,sed,Json,Shell,Awk,Sed,给定以下字符串: arn:aws:secretsmanager:us-east-1:3264873466873:secret:foo/bar 1564681234.974 foo/bar {"username":"admin","password":"admin123","secret_key":"KASJDFJHAKHFKAHASDF"} 4e397333-3797-4f0b-ad7e-8c1cc0ed041c VERSIONSTAGES AWSCURRENT 在shell脚本中,如何仅提取
arn:aws:secretsmanager:us-east-1:3264873466873:secret:foo/bar 1564681234.974 foo/bar {"username":"admin","password":"admin123","secret_key":"KASJDFJHAKHFKAHASDF"} 4e397333-3797-4f0b-ad7e-8c1cc0ed041c VERSIONSTAGES AWSCURRENT
在shell脚本中,如何仅提取JSON部分以如下方式结束:
{"username":"admin","password":"admin123","secret_key":"KASJDFJHAKHFKAHASDF"}
我可以使用两个sed命令来执行此操作:
echo $longString | sed 's/^.*{/{/' | sed 's/}.*$/}/'
但我想知道是否有一种方法可以只使用一个命令来完成此操作。要提取列,请使用
awk
:
echo $longString | awk '{print $4}'
或cut
:
echo $longString | cut -f 4 -d ' '
如果JSON数据中有空格,请小心。您最好使用
jq
来处理aws secretsmanager list secrets
和类似内容的结果。要提取列,请使用awk
:
echo $longString | awk '{print $4}'
或cut
:
echo $longString | cut -f 4 -d ' '
如果JSON数据中有空格,请小心。您最好使用jq
来处理aws secretsmanager列表机密
和类似内容的结果。您可以使用
echo $longString | sed -n 's|.*\({.*}\).*|\1|p'
要匹配并打印所需图案,可以使用
echo $longString | sed -n 's|.*\({.*}\).*|\1|p'
要匹配并打印所需的图案,只需将sed命令加入到单个命令中即可
sed的/^.*{/{;s/}.*$/}/'
您可以将sed命令连接到单个命令
sed的/^.*{/{;s/}.*$/}/'
要提取输入的连续部分,您可以使用grep
及其-o
选项(如果您的系统支持)。它告诉grep只输出匹配的部分
grep -o '{.*}'
要提取输入的连续部分,您可以使用
grep
及其-o
选项(如果您的系统支持)。它告诉grep只输出匹配的部分
grep -o '{.*}'
这个
awk
应该可以。我将处理字符串中是否有空格
echo $string | awk -F"[{}]" '{print $2}'
"username":"admin","password":"admin123","secret_key":"KASJDFJHAKHFKAHASDF"
这个
awk
应该可以。我将处理字符串中是否有空格
echo $string | awk -F"[{}]" '{print $2}'
"username":"admin","password":"admin123","secret_key":"KASJDFJHAKHFKAHASDF"
grep-o'{.*}'
maybe?grep-o'{.*}'
maybe?