Regex 取决于周围环境

Regex 取决于周围环境,regex,sed,Regex,Sed,如何对包含以下内容的文件执行sed替换 f[3][2,3][4]应替换为f[3][2,3][“字符串”][4]。当然,数字可以是不同的数字,我希望相同的替换发生。这里我们需要给出完整的模式,比如 f\[[0-9]*\]\[[0-9]*,[0-9]*\] 选择正确的部分,但我需要替换件提供与先前匹配的相同的编号(以及附加[“string”])。最好的方法是什么?您可以使用 sed 's/\(f\[[0-9]*]\[[0-9]*,[0-9]*]\)\[\([0-9]*\)]/\1["string"

如何对包含以下内容的文件执行sed替换
f[3][2,3][4]
应替换为
f[3][2,3][“字符串”][4]
。当然,数字可以是不同的数字,我希望相同的替换发生。这里我们需要给出完整的模式,比如

f\[[0-9]*\]\[[0-9]*,[0-9]*\]
选择正确的部分,但我需要替换件提供与先前匹配的相同的编号(以及附加
[“string”]
)。最好的方法是什么?

您可以使用

sed '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]*])
    (在BRE中,
    (…)
    必须转义)-第1组匹配
    f[
    ,0+位,
    ][
    ,0+位,
    ,0+位后跟
    ]
  • \[
    -a
    [
  • ([0-9]*)
    -第2组:0+位
  • ]
    -一个
    ]
    字符

谢谢您的明确回答!我有一个关于“细节”的问题,以确保我能理解。你是说(第2点和第4点)我应该只避开开头的方括号而不是结尾的方括号?@kvother结尾的方括号并不特别。
sed -E 's/(f\[[0-9]*]\[[0-9]*,[0-9]*])\[([0-9]*)]/\1["string"][\2]/g'