如何从外壳脚本中的更长混合字符串中提取JSON字符串



给定以下字符串:

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

在外壳脚本中,您如何仅提取JSON部分以这样最终出现:

{"username":"admin","password":"admin123","secret_key":"KASJDFJHAKHFKAHASDF"}

我能够使用两个SED命令来完成:

echo $longString | sed 's/^.*{/{/' | sed 's/}.*$/}/'

,但是想知道是否只使用一个命令可以做到这一点。

要提取输入的连续部分,您可以将grep与其-o选项(如果在系统上支持(。它告诉格雷普只输出匹配部分。

grep -o '{.*}'

用于提取列,使用 awk

echo $longString | awk '{print $4}'

cut

echo $longString | cut -f 4 -d ' ' 

请注意,如果您的JSON数据中有空格。您最好使用jq处理aws secretsmanager list-secrets和类似的结果。

您可以使用

echo $longString | sed -n 's|.*({.*}).*|1|p'

匹配和打印所需的模式

您可以将SED命令加入单个命令 sed 's/^.*{/{/;s/}.*$/}/'

awk应该这样做。如果字符串中有任何空间,我将处理。

echo $string | awk -F"[{}]" '{print $2}'
"username":"admin","password":"admin123","secret_key":"KASJDFJHAKHFKAHASDF"

相关内容