如何在linux中更改字符串中值的内容

Posted

技术标签:

【中文标题】如何在linux中更改字符串中值的内容【英文标题】:How would I change the contents of a value in a string in linux 【发布时间】:2022-01-09 08:08:52 【问题描述】:

如果我有一个看起来像这样的字符串,我将如何将第一个值更改为 true,然后在另一个调用中,将第二个值更改为 true

echo "\"item0\":\"$item0\", \"item1\":\"$item1\", \"item2\":\"$item2\", \"item3\":\"$item3\", \"item4\":\"$item4\", \"Success1\":false, \"Success2\":false, \"item4\":\"$item4\", \"item5\":\"$item5\"" > curldata.txt

这是我在第一种情况下想要的输出

echo "\"item0\":\"$item0\", \"item1\":\"$item1\", \"item2\":\"$item2\", \"item3\":\"$item3\", \"item4\":\"$item4\", \"Success1\":true, \"Success2\":false, \"item4\":\"$item4\", \"item5\":\"$item5\"" > curldata.txt

我见过其他可以根据行改变区域的方法,但我不确定字符串中有很多引号和相似之处

【问题讨论】:

您正在将echo 输出发送到文件;你想在之后编辑文件吗?您是否希望(以某种方式)修改echo 命令之前 写入文件?首先如何构建这个字符串(为什么不使用所需的true 条目构建它)?字符串是否有可能最初存储在变量中? 第一个“值”是否总是false? “值”条目是否总是与Success1Success2 相关联?是否总会有just 2 个值需要修改? (对我来说)不清楚我们是否只是将 2x false 条目替换为 2x true 条目,或者我们是否还必须考虑字段名称/标签和/或可变数量的字段/值.. . ? 我在拉东西,然后推东西。因此,在每个命令之后,如果成功,我将更新我的文件。如果它不成功,那么它将结束脚本并将其保存在一个文件中,另一个脚本将访问该文件。总是只有这两个值会被修改,没有别的。并且总是以 false 开头,然后改为 true 【参考方案1】:
jq '.Success1 = true | .Success2 = true' curldata.txt | sponge curldata.txt

相应地调整真/假值。

sponge 位于 moreutils 包中。

【讨论】:

这都是在 gitlab 管道中运行的。 gitlab 中可以访问海绵吗? in a gitlab pipeline. Is sponge accessible in gitlab? 这取决于所使用的 gitlab-runner... 但如果它是 docker executor 的默认设置,请使用 docker 容器,您可以在其中安装东西并安装所需的所有依赖项,例如 jq或海绵。

以上是关于如何在linux中更改字符串中值的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何计算包含数组中值的文档?

前端如何将form表单中值转成json字符串?

如何保留数组中值的引号

如何在 Linux 中更改主机名?运维工程师应该都知道吧!

SQL SERVER 2008 如何将字符集更改为UTF-8

在Linux如何让更改文件的字符编码