如何对包含以下内容的文件进行sed替换
f[3][2,3][4]
,应将其替换为f[3][2,3]["string"][4]
。当然,数字可能是不同的数字,我希望发生相同的替换。在这里,我们需要给出完整的模式,例如
f\[[0-9]*\]\[[0-9]*,[0-9]*\]
选择正确的部分,但随后我需要替换以提供与之前匹配的数字相同的数字(以及附加["string"]
)。最好的方法是什么?
答案 0 :(得分:2)
您可以使用
sed 's/\(f\[[0-9]*]\[[0-9]*,[0-9]*]\)\[\([0-9]*\)]/\1["string"][\2]/g'
或
sed -E 's/(f\[[0-9]*]\[[0-9]*,[0-9]*])\[([0-9]*)]/\1["string"][\2]/g'
基本上,从f
捕获第一部分到第三索引,并且也捕获第三索引中的数字。然后,使用RHS中的\1
和\2
占位符引用这些值。
详细信息
(f\[[0-9]*]\[[0-9]*,[0-9]*])
(ERE,在BRE中,(...)
必须转义)-组1匹配f[
,0+位数字,][
,0+位数字,{{ 1}}和0+个数字后跟,
]
-一个\[
[
-第2组:0位以上数字([0-9]*)
-一个]
字符。