如何使用 sed 注释 tex 文件中的某些行(“%”对于 sed 是否有特殊含义?)

如何使用 sed 注释 tex 文件中的某些行(“%”对于 sed 是否有特殊含义?)

我一直在读一些东西 对 TeX 用户最有用的 sed 单行命令 这与我的问题有关,但尽管很有趣,但这不是我需要的。

我在子目录中有许多 tex(beamer 类)文件,我想在每个文件中添加几行注释。

目的是修改序言,以便编译文件,获得如中所示的讲义 向文档传递参数答案 45

在每个文件中,我都有以下几行,我会根据需要对其进行注释。第一行用于编译 Beamer 演示文稿,其他三行用于编译讲义

%here is some text, consistent in all the .tex files
%\documentclass[xcolor={usenames, table, x11names}, final, 10pt]{beamer} 
%
 \documentclass[xcolor={usenames, table, x11names}, handout, 10pt]{beamer} 
 \usepackage{pgfpages}
 \pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

上面的四行应该被注释掉,并且应该添加一些行。所需的 .tex 文件应该包含以下内容

%here is some text, consistent in all the .tex files
\ifdefined\ishandout
 \documentclass[xcolor={usenames, table, x11names}, handout, 10pt]{beamer} 
 \usepackage{pgfpages}
\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]
\else
  \documentclass[xcolor={usenames, table, x11names}, final, 10pt]{beamer} 
\fi

%\documentclass[xcolor={usenames, table, x11names}, final, 10pt]{beamer} 
%
%\documentclass[xcolor={usenames, table, x11names}, handout, 10pt]{beamer} 
%\usepackage{pgfpages}
%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

当然,我可以手动编辑每个文件,但我不会学到任何东西。

\ifdefined我成功地将从到的行\fi插入到文件中(保存为 insert.txt),然后在终端(debian wheezy)中发送以下行

sed  -i "/^%here is some text, consistent in all the .tex files$/ r ../insert.txt" lesson_10.tex

我只在一个 .tex 文件上测试过,它可以工作

为了将这些行添加到每个子目录中的每个文件,我编写了这个 bash 脚本

   for i in ??_lesson*/ 
    do
        if [ -d $i ] 
            then                
                cd $i
            THIS=$(ls lesson_??.tex) 
                 sed  -i "/^%here is some text, consistent in all the .tex files$/ r ../insert.txt" $THIS
            fi
        done

现在我需要一个 sed 命令来更改/替换行

\documentclass[xcolor={usenames, table, x11names}, handout, 10pt]{beamer} 
\usepackage{pgfpages}
\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

进入/与

%\documentclass[xcolor={usenames, table, x11names}, handout, 10pt]{beamer} 
%\usepackage{pgfpages}
%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

我在网上某处看到过 sed 一次处理一行,所以我尝试了这个。

sed "s/%\documentclass/%\documentclass/g" lesson_01.tex > checkthis.tex; head checkthis.tex 

返回

 \%documentclass[xcolor={usenames, table, x11names}, final, 10pt]{beamer} 
 \%documentclass[xcolor={usenames, table, x11names}, handout, 10pt]{beamer} 
 \usepackage{pgfpages}
 \pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

执行另一行是为了检查问题是否出在命令的s或部分g

sed "s/%\documentclass/%\documentclass/g" lesson_01.tex > checkthis.tex; head checkthis.tex 

返回

\%
  oo[xcolor={usenames, table, x11names}, final, 10pt]{beamer} 

 \%
   oo[xcolor={usenames, table, x11names}, handout, 10pt]{beamer} 
 \usepackage{pgfpages}
 \pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

显然,“ %”对于 sed 来说具有特殊含义,但我忽略了这一含义。

我也尝试在 之前添加一些转义字符%,但无济于事。谷歌搜索没有帮助,因此我决定在这里直接寻求帮助。

相关内容