gpt4 book ai didi

bash - 如何替换除 TeX 命令后出现的所有空格?

转载 作者:行者123 更新时间:2023-11-29 09:38:37 25 4
gpt4 key购买 nike

我有一个文件,file1.tex,包含 TeX 命令,如 \em\par。所有命令的格式都是 \ + 一些从 A 到 Z 的大写和小写字母字符串,后面都跟一个空格。

我需要使用这样的命令,它将所有空格替换为 \、一个斜线和一个空格。

sed -i "s/\ /\\\\\ /g" ./file1.tex

不过,我不希望这些替换紧接在 TeX 命令之后出现的空格。例如,我想要这个:

\noindent This is a sentence {\em which has some words}.
This is another \hfill sentence \ldots with some more words.

成为:

\noindent This\ is\ a\ sentence\ {\em which\ has\ some\ words}.
This\ is\ another\ \hfill sentence\ \ldots with\ some\ more\ words.

我如何替换所有空格,除了出现在以 \sometext 形式出现的任何命令之后的空格?

最佳答案

sed不支持后视,我认为使用 Perl 会容易得多。

$ perl -pe 's/\b(?<!\\)(\w+)\b /$1\\ /g' texfile
\noindent This\ is\ a\ sentence\ {\em which\ has\ some\ words}.
This\ is\ another\ \hfill sentence\ \ldots with\ some\ more\ words.

要使更改就地永久保存在文件中:

perl -pi -e 's/\b(?<!\\)(\w+)\b /$1\\ /g' texfile

解释:

正则表达式匹配不以反斜杠开头且后跟空格的单词。

  • \b - 单词边界
  • (?<! - 开始一个非捕获的负面回顾(不匹配)
  • \\ - 转义反斜杠
  • ) - 关闭后视
  • ( - 开始一个捕获组
  • \w+ - 匹配一个或多个单词字符(字母数字加下划线)
  • ) - 关闭捕获组
  • $1 - 将捕获组复制到替换中
  • \\ - 添加反斜杠
  • g - 在全局范围内进行替换

我在列表中遗漏了一些不言而喻的事情。

关于bash - 如何替换除 TeX 命令后出现的所有空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10669985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com