如何按名称而不是修复列删除和替换特定字段值

时间:2014-09-23 03:37:24

标签: linux bash shell command-line sed

我想逐行替换和删除文本文件中的子字符串。我想要更改的信息是在特定字段下。例如,我有以下文字:

{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

1 个答案:

答案 0 :(得分:1)

sed 's/\(version:[^,}]*,\)*\(.*\)info:[^,}]*\(,\{0,1}\)\(.*\)\(, *version:[^,}]*,\)*/\2info:"foo"\3\4/' file

(未经测试)应该这样做(GNU sed为--posix