Bash使用sed命令用%注释LaTeX .cls文件中的一行,

时间:2018-11-08 23:16:06

标签: bash sed replace

我正在尝试将bash与sed替换为

    \printfield{year}%

以此

    %\printfield{year}%

该行的开头有4个空格(尽管我不确定这是否重要)。基本上,这是一个LaTeX *.cls文件,我需要注释掉每次出现的\printfield{year}%

我的尝试基于this SO post

sed -i 's/\printfield{year}%/%\printfield{year}%/g' mydir/xxxxx.cls

无论如何产生此输出

    \%printfield{year}%

%符号错误的位置-应该在行的开头(第一个字符),但是显示为第二个字符。我也尝试过sed -i "...",即使用双引号,但仍然给出与单引号相同的错误输出(上方)。

是否可以通过在bash中使用%在行首放置sed来注释掉此行?

系统信息

Ubuntu 18.10

3 个答案:

答案 0 :(得分:3)

反斜杠需要转义

$ sed 's/\\printfield{year}%/%&/g' file

请注意,您不必再次重复匹配的字符串,&就是这样。

答案 1 :(得分:1)

\p

\是转义字符。为了打印\,您需要指定两次。 \p仅转至p,而\被忽略。使用:

sed 's/\\printfield{year}%/%\\printfield{year}%/g'

答案 2 :(得分:1)

这是因为bash将\字符解释为转义字符,因此在您的sed命令中

sed -i 's/\printfield{year}%/%\printfield{year}%/g' mydir/xxxxx.cls

它试图用另一个命令替换转义的'p'打印域,以解决这个转义,将您的\换成另一个\

如此

sed -i 's/\\printfield{year}%/%\\printfield{year}%/g' mydir/xxxxx.cls