我正在尝试使用带有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