Bash 或 Python:在所有 .tex 文件中递归地追加和前置一个字符串

Posted

技术标签:

【中文标题】Bash 或 Python:在所有 .tex 文件中递归地追加和前置一个字符串【英文标题】:Bash or Python : Append and prepend a string recursively in all .tex files 【发布时间】:2017-10-20 11:21:10 【问题描述】:

我正在尝试找到一种方法来使用包“子文件”在 LaTeX 中更改我的主/子文档工作流程,因此我正在尝试附加并预先添加到我已经拥有以下几行的每个文件中:

要添加的行:

\documentclass[<mainfile>]subfiles
\begindocument

要追加的行:

\enddocument

我正在考虑使用 bash,但我也可以使用 Python,但我不知道什么是最好的。

如果您有任何建议:-) ?

【问题讨论】:

使用sed编辑文件会非常快。 是的,发布输入片段和预期结果 【参考方案1】:

一种直观的方式是使用cat

例如,首先创建两个文件prepend.texappend.tex,其中包含您要添加的内容。将它们与源文件连接以创建所需的目标文件

$ cat prepend.tex source.tex append.tex > target.tex

要将其递归应用于目录中的所有现有文件,例如src/,您可以使用:

$ find src/ -type f -name "*.tex" -exec sh -c "cat prepend.tex '' append.tex > ''.tmp" \;

这将在每个源文件旁边创建一个新的.tmp 文件。在继续用 .tmp 覆盖源文件之前,请确保这些 .tmp 文件中的结果exaclty是您想要的:

$ find src/ -type f -name "*.tmp" -exec rename -n 's/.tmp$//' '' \;

rename命令的选项从-n更改为-f以强制覆盖

【讨论】:

哇哇超级流畅!一秒钟的反思来处理每个文件,并且感觉使用临时文件非常安全(我会记住这一点!)。非常感谢! @EtienneS 很酷,很高兴我能提供帮助 :) 顺便说一下,其他用户提到的 sedawk 在需要更复杂的编辑时也可以派上用场。 我尝试使用 sed,但它有点棘手:我还没有习惯(必须!)

以上是关于Bash 或 Python:在所有 .tex 文件中递归地追加和前置一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

Python 或 Unix/bash。重命名目录中每个文件的第 11 列

使用 python 或 bash 按时间戳将音频文件复制到新文件夹

如何在 bash 或 python 中检查 Ubuntu 程序 coredump?

使用 python-xlsxwriter 或 bash 打开受密码保护的 ods 文件

如何将 .out 文件从包括 120 个子文件夹的文件夹中复制到新文件夹中,其中还包括 120 个子文件夹? (通过使用 Python、Bash 或 R)

将所有输出重定向到 Bash 中的文件 [重复]