我正在运行一个命令,它基本上解析了一些JSON,然后使用awk和sed提取ID。
当我自己运行命令时,它会给出正确的输出,例如
cat CustomThemeProfile.json | sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | awk -F ":" '{print $0}' | grep id | awk -F ":" '{print $2}' | sed 's/\"//g'
2F13F732-4BCB-49DC-A0FB-C91B5DE58472
但是当我想将输出分配给变量时,我得不到任何回报。例如
cat CustomThemeProfile.json | id=$(sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | awk -F ":" '{print $0}' | grep id | awk -F ":" '{print $2}' | sed 's/\"//g'); echo $id
任何想法。我真的希望这是从一个脚本运行但是目前脚本什么都不做,坐着等待什么?
脚本我正在打电话。
第一个脚本只找到所有json文件,然后调用此脚本。所以文件传递
#!/bin/bash
echo "running search and replace script ..."
id="$(sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | awk -F ":" '{print $0}' | grep id | awk -F ":" '{print $2}' | sed 's/\"//g')"
filler="0-0000-0000-0000-000000000000"
echo $id
if [ $(#id) -ge 8]; then echo "New Profile ID in use"; exit
else idnew=$id$filler
fi
sed -i '"s/$id/$idnew/g"' $1
sed -i 's/ps_hpa/ps_hpa/g' $1
答案 0 :(得分:0)
您需要稍微重新排列语法:
id=$(sed -e 's/[{}]/''/g' CustomThemeProfile.json | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | awk -F ":" '{print $0}' | grep id | awk -F ":" '{print $2}' | sed 's/\"//g')
注意我避免无用的cat并将文件直接传递给sed。这就是你的脚本什么都不做的原因 - sed正在等待一些输入。可以将cat移到命令替换中,但这样做没有任何好处。如果某个工具能够自己读取文件,那么您应该使用该功能。
更好的解决方案是使用jq
正确解析您的JSON。为了让我们向您展示如何操作,您应该编辑您的问题以向我们展示您的输入样本。