sed更换取决于周围环境

时间:2018-11-06 10:31:59

标签: regex sed

如何对包含以下内容的文件进行sed替换 f[3][2,3][4],应将其替换为f[3][2,3]["string"][4]。当然,数字可能是不同的数字,我希望发生相同的替换。在这里,我们需要给出完整的模式,例如

f\[[0-9]*\]\[[0-9]*,[0-9]*\]

选择正确的部分,但随后我需要替换以提供与之前匹配的数字相同的数字(以及附加["string"])。最好的方法是什么?

1 个答案:

答案 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'

请参见online sed demo

基本上,从f捕获第一部分到第三索引,并且也捕获第三索引中的数字。然后,使用RHS中的\1\2占位符引用这些值。

详细信息

  • (f\[[0-9]*]\[[0-9]*,[0-9]*])(ERE,在BRE中,(...)必须转义)-组1匹配f[,0+位数字,][,0+位数字,{{ 1}}和0+个数字后跟,
  • ]-一个\[
  • [-第2组:0位以上数字
  • ([0-9]*)-一个]字符。