通过命令行在括号内插入文本

时间:2012-08-05 11:36:41

标签: parsing sed command

我正在编辑一个文件,想要查找所有出现的

\smash{example}
\smash{$example2$}

并将其替换为

\smash{\small{example}}
\smash{\small{$example2$}}

分别在命令行中使用“sed”之类的东西。有关如何执行此操作的任何帮助吗?

1 个答案:

答案 0 :(得分:0)

这样就可以了:

sed -r 's/(\\smash\{)([^\}]+\})/\1\\small\{\2\}/g' <filename>

它的工作原理如下:

  • 使用sed使用正则表达式sed 's/<regexp>/<replacement>/'执行文本替换
    • 选项-r允许使用扩展正则表达式(需要引用\1\2组),最后g表示替换应该是适用于与<regexp>
    • 匹配的每一段文字
    • <regexp>模式:(\\smash\{)([^\}]+\})分为两组:
      1. (\\smash\{)只是捕获字符串的第一部分并将其放入组\1
      2. ([^\}]+\})大致上说“读取任何字符序列直到您获得}并将其放入第2组\2
    • 现在,您可以使用\1部分中的\2<replacement>组,并在它们之间插入\\small{。插入组2后,也会添加完成}

要详细了解sedregular expressions,您可能需要先阅读这些couple of paragraphs