如何用 sed 替换 Latex 文件前导码中的文本?

如何用 sed 替换 Latex 文件前导码中的文本?

我编写了以下 sed 代码,但我还没有找到使其工作的方法......

sed -is 's/documentclass\{standalone\}/documentclass\[class\=memoir\]\{standalone\}/gp' *.tex

我是否以错误的方式使用转义序列?以下是返回的错误:

sed: -e expression #1, char 76: Invalid content of \{\}

答案1

在 BRE(基本正则表达式)模式(即没有-Eor-r命令行选项)中,大括号并不特殊,而转义大括号用于量词,例如\{1,3\}.错误消息是因为standalone无法解析为数字量词。所以你要{standalone}

$ printf '%s\n' 'documentclass{standalone}' | sed 's/documentclass{standalone}/documentclass[class=memoir]{standalone}/gp'
documentclass[class=memoir]{standalone}
documentclass[class=memoir]{standalone}

或者保留转义大括号,但使用 ERE(扩展正则表达式)模式:

$ printf '%s\n' 'documentclass{standalone}' | sed -r 's/documentclass\{standalone\}/documentclass[class=memoir]{standalone}/gp'
documentclass[class=memoir]{standalone}
documentclass[class=memoir]{standalone}

请注意,无论哪种情况,RHS 中的任何内容都不需要转义。

也可以看看:

另请注意,至少在 GNU sed 中,-is将就地编辑文件,创建后缀为 的备份文件s。如果您想传递-i-s选项,则必须单独执行或按其他顺序执行-si。然而 iirc-i意味着-s后者可能是多余的。

相关内容