- 平台:RHEL7
- 外壳: 巴什
- 预期结果:将值存储为变量
我正在尝试从如下文本中捕获 IP:
{
"ip": "12.34.56.7",
"type": "LEARNED"
}
当我从终端运行以下命令时,我按预期获得了 IP。
grep '"ip":' ../path/to/file.txt | awk '{ print $2 }' | tr -d '"' | tr -d ','
以下是我在脚本中的内容:
IP=grep '"ip":' ../path/to/file.txt | awk '{ print $2 }' | tr -d '"' | tr -d ','
我尝试了一些不同的方法,例如将所有内容放在引号中,或者使用但不使用骰子IP=
转义 grep ip 文本周围的引号。\\
我只是不确定解决这个问题的正确方法。如果脚本没有引号,则该脚本会分解我的命令,或者由于某种原因它会从 awk 中删除 $2。
感谢您提供任何信息。
答案1
当您想要将 shell 命令的输出分配给变量时,请VAR=$(command)
根据您的情况使用 ,
IP=$(grep '"ip":' ../path/to/file.txt | awk '{ print $2 }' | tr -d '"' | tr -d ',')
但前段时间有人决定发明sed
以避免太多复杂的管道:
IP=$(sed '/"ip":/!d;s/",//;s/.*"//' ../path/to/file.txt)
/"ip":/!d
忽略其中没有的所有"ip":
行s/",//
删除结尾的双引号和逗号;s/.*"//
删除剩余双引号之前的所有内容