如何修复sed组捕获以取消LaTeX代码部分?

时间:2013-09-10 13:27:35

标签: regex sed

我有一段文字,我想要删除。

\caption[Server HTTP responses]{Server HTTP responses\label{fig:http-status}}

我希望sed碰到最终},以便它像标签一样在标签前面开始:

\caption[Server HTTP responses]{Server HTTP responses}\label{fig:http-status}

对我的测试文本使用正则表达式编辑器,似乎:

(\\label\{fig:[a-zA-z0-9 -]{1,}\})\}$

替换为

\}\1

会做到这一点。这适用于debuggex.com和Mozilla正则表达式测试程序。

然而,当我用sed测试时(我是一个完整的新手用sed,所以请在这里轻松一下),我用

cat ./file.tex | sed -e 's@(\\label\{fig\:[a-zA-z0-9 -]{1,}\})\}$@\}\1@g' > test_output.txt

返回: sed: -e expression #1, char 47: Invalid content of \{\}

我在这里做错了什么?是否有更简单的方法来运行大量文本文件来替换正则表达式?

1 个答案:

答案 0 :(得分:2)

你有一些问题:

  1. 花括号不是特别的,不要逃避它们以获得它的字面含义。
  2. 与括号相同,没有转义匹配文字,转义它们进行分组。
  3. 科隆并不特别,不要逃避它们。
  4. 范围A-z不正确。
  5. /g标志不需要替换一次。
  6. 得到:

    sed -e 's@\(\\label{fig:[a-zA-Z0-9 -]\{1,\}}\)}$@}\1@' ./file.tex
    

    产量:

    \caption[Server HTTP responses]{Server HTTP responses}\label{fig:http-status}