代码之家  ›  专栏  ›  技术社区  ›  Guillermo Garza

使用Perl插入美元符号

  •  0
  • Guillermo Garza  · 技术社区  · 6 年前

    我试图在Bash脚本中编写一个Perl一行程序,将LaTeX文件中的数学模式分隔符从“\[”和“\]”改为美元符号。

    \[a + b = c\] $a + b = c$

    不幸的是,我不知道如何在Perl中正确地避开美元符号。

    我最接近的就是 perl -pi -e 's/\[/\$/gm' file.tex . 但是,这将插入 \$ 而不是一个美元符号。

    0 回复  |  直到 6 年前
        1
  •  5
  •   chepner    6 年前

    你没有插入 \$ ;您只是在替换 [ \[ ,带有美元符号。比较:

    # Wrong
    $ perl -p -e 's/\[/\$/gm' tmp.txt
    \$a + b = c\]
    
    # Right
    $ perl -p -e 's/\\\[/\$/gm' tmp.txt
    $a + b = c\]
    

    $ perl -p -e 's/\\\[|\\\]/\$/gm' tmp.txt
    $a + b = c$
    

    不管它值多少钱,您都可以使用标准编辑器来实现这一点 ed ,而不是 perl ,尽管转义有点复杂(甚至切换到tripleee更简单的正则表达式来匹配任何一个分隔符;它看起来相同,但是double \\ printf ,不是 ,因为我在用 | 在替换运算符中。):

    $ cat tmp.txt
    \[a + b = c\]
    $ printf 's|\\\[][]|$|g\nwq\n' | ed tmp.txt
    14
    12
    $ cat tmp.txt
    $a + b = c$
    
        2
  •  5
  •   tripleee    6 年前

    不,问题是您正在替换(反斜杠转义)文本 [ 使用(反斜杠转义)字面美元符号,但完全不匹配或替换字面反斜杠。

    试试这个。

    perl -pi -e 's/\\[][]/\$/g' file.tex
    

    这个 /m 旗子好像没用,所以我把它拿了出来。

    [...] 包含两个文字字符 ] [ . 他们必须按照这样的顺序,保持表达的明确(虽然看起来也很有趣)。当然了, \\

    推荐文章