对 TeX 用户最有用的 sed 单行命令

对 TeX 用户最有用的 sed 单行命令

问题标题说明了一切。你最喜欢的是什么sed编辑 TeX 文件时,一行代码是必需的。我见过至少一条sed这个论坛上的好家伙正在写一本关于sed在 TeX 中。也许他可以自愿分享一些他的技巧?

我保证我的很快就会到来(我喜欢用sed进行编辑!)。

答案1

我主要使用sed用于在整个目录中的 TeX 文件中进行搜索和替换。例如:

find "." -name "*.tex" | xargs sed -i -e "s/\(\\usepackage\){times}/\1{mathptmx}/g"

这会将所有出现的 更改为\usepackage{times}\usepackage{mathptmx}以使 Times 字体既可用于文本也可用于数学运算。

  • find搜索所有 .tex 文件
  • 管道符号|允许使用一个命令的输出作为另一个命令的输入
  • xargs获取由 返回的文件名列表find,并将它们合并为一行
  • sed为该行中包含的每个文件应用所需的更改。我使用选项
    • -i用于就地编辑(您可以指定后缀以进行备份)
    • -e用于执行脚本,此处s/.../.../..用于搜索和替换
  • sed理解正则表达式语法,这里我另外使用了反斜杠\来引用一些对 shell 有特殊含义的字符,例如括号和反斜杠本身
  • 第一行末尾的反斜杠\是为了换行,以便更好地显示。如果您将所有内容输入到一个命令行中,则不需要它。

对于这种经常使用的命令行,我通常会创建一个 shell 函数或一个 shell 脚本,这样我就不需要输入太多内容,只需使用正则表达式作为参数来调用我的函数/脚本即可。

答案2

我之前在这个网站上的一个回答是一个脚本,用于提取带有图表的页面并将其编译成一个文档。 这整个脚本也包含在 Gist 中

该脚本的工作原理是从文件中提取图片列表.aux。以下几行仅提取图片,然后提取末尾的唯一编号(文档中的页码):

 grep figure |     sed 's/.*}}{\([1-9]*\)}}/\1/' | uniq |

这也说明了一个重要的观点:也许有很好的方法来利用sed,但是重要的是 Unix 工具如何协同工作。仅仅孤立地关心sed会失去其用处。

答案3

我发现了一个不错的命令行工具

grep -R usepackage * | cut -d']' -f2 | cut -s -d'{' -f 2 | sed s/"}"/.sty"}"/g \
  | cut -d'}' -f1 | sort | uniq | xargs dpkg -S | cut -d':' -f1 | sort | uniq

它分别返回与文档或文件夹中使用的 LaTeX 包相对应的 Debian 包名称。也可以与和结合使用findxargs检查包括子目录。这当然仅适用于来自 Debian 或 Ubuntu 存储库的 TeX 安装。

sed这是一个在更大、更通用的环境中仅用于简单搜索和替换的示例,结合诸如sortuniq和之类的命令行工具grep

相关内容