我必须在匹配行之间的模式后插入一些文本。
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]