我的文件file1
包含以下内容
{"name":"clio5", "value":"13"}
{"name":"citroen_c4", "value":"23"}
{"name":"citroen_c3", "value":"12"}
{"name":"golf4", "value":"16"}
{"name":"golf3", "value":"8"}
我想查找包含单词clio5
的行,然后用以下字符串替换找到的行
string='{"name":"clio5", "value":"1568688554"}'
答案 0 :(得分:3)
$ string='{"name":"clio5", "value":"1568688554"}'
$ awk -F'"(:|, *)"' -v string="$string" 'BEGIN{split(string,s)} {print ($2==s[2]?string:$0)}' file
{"name":"clio5", "value":"1568688554"}
{"name":"citroen_c4", "value":"23"}
{"name":"citroen_c3", "value":"12"}
{"name":"golf4", "value":"16"}
{"name":"golf3", "value":"8"}
$ string='{"name":"citroen_c3", "value":"1568688554"}'
$ awk -F'"(:|, *)"' -v string="$string" 'BEGIN{split(string,s)} {print ($2==s[2]?string:$0)}' file
{"name":"clio5", "value":"13"}
{"name":"citroen_c4", "value":"23"}
{"name":"citroen_c3", "value":"1568688554"}
{"name":"golf4", "value":"16"}
{"name":"golf3", "value":"8"}
根据@ dogbane的评论对上述内容进行了更新,以便即使文本包含"
s也能正常运行。如果文本可以包含":"
(有适当的转义),它仍然会失败,但这似乎不太可能,OP可以告诉我们它是否是一个有效的问题。
答案 1 :(得分:2)
首先,从您的name
中提取$string
部分为
NAME=`echo $string | sed 's/[^:]*:"\([^"]*\).*/\1/'`
然后,使用$NAME
将字符串替换为
sed -i "/\<$NAME\>/s/.*/$string/" file1
答案 2 :(得分:1)
像这样使用awk:
awk -v str="$string" -F '[,{}:]+' '{
split(str, a);
if (a[3] ~ $3)
print str;
else print
}' file.json