我正在尝试将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
答案 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