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



我正在尝试使用带有sed的bash来替换这个

printfield{year}%

通过这个

%printfield{year}%

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

我的尝试是基于这个SO后

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

但是它产生这种输出

%printfield{year}%

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

有没有一种方法可以通过在这行的开头放一个%,在bash中使用sed来注释这行?

系统信息

Ubuntu 18.10

反斜杠需要转义

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

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

p

是一个转义字符。为了打印,您需要指定两次。p仅逃逸到p,而被忽略。用途:

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

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

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

它试图用另一个命令替换转义的"p"printfield,以绕过此转义,用另一替换您的

所以

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

最新更新