String 通过'在匹配之前/之后添加字符串;sed';

String 通过'在匹配之前/之后添加字符串;sed';,string,bash,shell,sed,String,Bash,Shell,Sed,我有一堆带字符串的文件,我想搜索特定的匹配项:“exampledata” 看起来像这样: ...(...name: Example; age: 21; version: 2131; exampledata: hello;) end 如果在一行中定义了“exampledata”,则什么也不做,否则添加该字符串exampledata,让我们在版本号后面加上一个数字(可以是1个密码或最多5-6个),或者将其放在右括号之前“)”这始终是字符串中的模式。(即,“Exampledata”位于version

我有一堆带字符串的文件,我想搜索特定的匹配项:“exampledata

看起来像这样:

...(...name: Example; age: 21; version: 2131; exampledata: hello;) end
如果在一行中定义了“exampledata”,则什么也不做,否则添加该字符串exampledata,让我们在版本号后面加上一个数字(可以是1个密码或最多5-6个),或者将其放在右括号之前“”这始终是字符串中的模式。(即,“Exampledata”位于version之后,位于字符串的末尾。后面只有一个“”。)

这就是我到目前为止所做的,我不知道如何在版本后制作圆点。每一行中都可能有一个密码版本或更高的数字。想法


基本上,我正在寻找一个sed命令,它添加了一个“exampledata:2;”例如,如果以前根本没有exampledata?(结果如下:blabla…(…版本:98;exampledata:2;)

您的模式具有数据中未显示的双引号

sed '/exampledata:/!s/version: [0-9]*;/& exampledata: 2;/'

/exampledata:/!
使命令在不包含
exampledata:
的行上执行,然后执行更正确的替换。

StackOverflow不是免费的编码服务。您应该这样做。请更新您的问题,以显示您在a中已经尝试过的内容。有关更多信息,请参阅,并采取行动用法:)使用
/模式/命令
在与模式不匹配的任何行上执行命令。该命令应将
替换为
示例数据:2;)谢谢@Barmar将问题编辑为我已经解决的问题。用exampledata替换)的想法:2;)太棒了!要用它吗?
version:2131
周围没有双引号,为什么要把它们放在模式中?这是否需要在末尾加一个“g”使它全局循环/通过每一行,即使在纠正了一个特定的错误之后?
g
只需要在一行上进行多次替换。
sed
默认情况下循环通过所有行。哦,好的,我明白了。我将测试你给出的示例,直到明天,然后再报告。如我所愿,应该工作。
sed '/exampledata:/!s/version: [0-9]*;/& exampledata: 2;/'