【发布时间】:2014-11-17 03:35:28
【问题描述】:
我想逐行替换和删除文本文件中的子字符串。我要更改的信息位于特定字段下。例如,我有以下文字:
{name:x, version:1.0, info:"test", ...}
{name:y, version:0.1, info:"test again", ...}
{name:z, version:1.1, info:"test over", ...}
{name:x, info: "test", ..., version:1.2, ...}
该字段可以随机排列。我想删除所有版本值并用某个特定字符串替换所有信息值,我们说“foo”。
预期结果:
{name:x, info:"foo", ...}
{name:y, info:"foo", ...}
{name:z, info:"foo", ...}
{name:x, info:"foo", ...}
有没有聪明的方法可以通过 shell 脚本来做到这一点?我不知道如何替换上面的子字符串?
我知道一些愚蠢的命令
sed 's/info:\([^,}]*\)/info:\"foo\"/' file
sed 's/version:\([^,}]*\)//' file
【问题讨论】:
-
您发布的
sed有什么问题?最好包括当前输出和错误描述。祝你好运。 -
对 json 数据使用 json 工具(假设是这样)。
-
json 工具?你能提供更多信息吗? @EtanReisner
-
当前的 sed 是正确的。我只是想找到一种更聪明的方法@shellter
-
@eleven 如果您正在寻找一种更智能的方式,那么您需要遵循 Etan 的建议。使用 bash 和 family 解析 JSON 非常 容易出错。如果您当前的
sed命令有效,那么您应该坚持使用它。但是,我感觉您的sed解决方案对某些输入感到厌烦,因此您提出了问题。
标签: linux bash shell command-line sed