如何在 shell 脚本中的特定模式之后插入文本到文件中?

如何在 shell 脚本中的特定模式之后插入文本到文件中?

我必须在匹配行之间的模式后插入一些文本。

  core: [dev][delta3=deltafile;delta3dir=755|workpm][staging=stageingfile]

  Expected output is:

  core: [dev][delta3=deltafile;delta3dir=755|workpm][delta6=delta6file;delta6Dir=755|workpm][staging=stageingfile]

现在我尝试的是以下:但这并没有按预期工作

 sed -i 's/\<[delta3=deltafile;delta3dir=755|workpm]\>/& [delta6=delta6file;delta6Dir=755|workpm]/' file.txt

这是编辑我的文件,但 [delta6...] 条目在之后突然附加

File data is like: asdasdasdad   B-L-D-V-E-R

output is showing: asdadasdadd B-L-D-[delta6=delta6file;delta6Dir=755|workpm] -V-E-R

答案1

您需要转义|和 左括号[,因为它们是正则表达式中的特殊字符。

此外,您还使用了不需要的单词边界匹配\<,并且可能会导致问题。\>

但对我来说它仍然只能使用sed -E(还不确定为什么......)。

sed -Ei 's/\[delta3=deltafile;delta3dir=755\|workpm]/&[delta6=delta6file;delta6Dir=755|workpm]/' file.txt

或者如果您sed不支持&反向引用:

sed -Ei 's/(\[delta3=deltafile;delta3dir=755\|workpm])/\1[delta6=delta6file;delta6Dir=755|workpm]/' file.txt

输出:

$ echo "core: [dev][delta3=deltafile;delta3dir=755|workpm][staging=stageingfile]" \
| sed -E 's/\[delta3=deltafile;delta3dir=755\|workpm]/&[delta6=delta6file;delta6Dir=755|workpm]/'
core: [dev][delta3=deltafile;delta3dir=755|workpm][delta6=delta6file;delta6Dir=755|workpm][staging=stageingfile]

相关内容