【发布时间】:2022-01-22 06:28:38
【问题描述】:
我有一个这样的命令,它是标记单词出现在文档的索引中:
sed -i "s/\b$line\b/\\\keywordis\{$line\}\{$wordis\}\{$definitionis\}/g" file.txt
问题是,它在现有匹配中查找匹配,这意味着它的例如“hello”被替换为\keywordis{hello}{a common greeting},但随后“greeting”也可能被搜索到,\keywordis{hello}{a common \keywordis{greeting}{a phrase used when meeting someone}}...
如何让 sed 执行替换,但忽略大括号内的文本?
- 在这种情况下,大括号总是出现在同一行。
【问题讨论】:
-
为什么是
sed?为什么不使用实际的编程语言?but then "greeting" might be searched too, an在 sed 中创建状态机非常困难。这是“可能的”,但在sed中这样做是没有意义的,除了学术目的。用 Perl 或 Python 编写一个真正的解析器。 -
$line的内容是什么?你似乎在问 XY 问题——你问的是 sed。您不想问如何将特定格式应用于您的 Latex 文档吗?