我一直在读一些东西 对 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 来说具有特殊含义,但我忽略了这一含义。
我也尝试在 之前添加一些转义字符%
,但无济于事。谷歌搜索没有帮助,因此我决定在这里直接寻求帮助。