将 XML 标记值匹配的前两个字符替换为静态值

Replace First Two Characters of XML Tag Value Match with Static Value

如果模式匹配不是 00,我正在尝试用 00 替换 XML 标签 <LineStyle><color> 值匹配的前两个字符。

XML

<?xml version="1.0" encoding="UTF-8"?>
  <LineStyle>
    <color>ff969696</color>
  </LineStyle>
    <color>ff969696</color>
  <LineStyle>
    <color>e680e680</color>
  </LineStyle>
    <color>e680e680</color>
  <LineStyle>
    <color>e680f7f7</color>
  </LineStyle>
    <color>e680f7f7</color>
  <LineStyle>
    <color>e67c88f4</color>
  </LineStyle>
    <color>e67c88f4</color>

例如,<LineStyle><color>ff......<LineStyle><color>e6...... 的模式匹配将被替换为 <LineStyle><color>00...... 等等。

尝试的代码

sed 's/<LineStyle><color>[0-9][a-z]*/<LineStyle><color>00*/g'

使用这个 Perl one-liner:

perl -i.bak -0777 -pe 's{( <LineStyle> \s* <color> ) .. }{00}gxms' in_file

Perl one-liner 使用这些命令行标志:
-e :告诉 Perl 查找代码 in-line,而不是在文件中。
-p :一次循环输入一行,默认情况下将其分配给 $_ 。在每次循环迭代后添加 print $_
-i.bak:编辑输入文件in-place(覆盖输入文件)。在覆盖之前,通过在其名称后附加扩展名 .bak 来保存原始文件的备份副本。 -0777 : Slurp 整个文件。

正则表达式使用这些修饰符:
/g : 重复匹配模式。
/x : 为了便于阅读,忽略空格和注释。
/m : 允许多行匹配。
/s : 允许 . 匹配换行符。

另请参见:
perldoc perlrun: how to execute the Perl interpreter: command line switches
perldoc perlre: Perl regular expressions (regexes)
perldoc perlrequick: Perl regular expressions quick start