我们如何在匹配两个文本文件时查找和替换单词?

Posted

技术标签:

【中文标题】我们如何在匹配两个文本文件时查找和替换单词?【英文标题】:How can we find and replace words while matching two text files? 【发布时间】:2021-11-07 22:42:46 【问题描述】:

我有两个不同格式的单词数据库,用于两个不同的词典。其中一个包含每个单词的连字符版本(例如ad‧mi‧ra‧tion 代表admiration),而另一个则没有。我的目标是用带连字符的单词替换后者中不带连字符的单词。

假设我们有

admiration
<span class="INFLX" >admiration</span><span class="HYPHENATION" >ad‧mi‧ra‧tion</span>
</>

source1.txt

admiration    
<a style="color: darkblue; text-decoration: none" href="sound://admiration_Uk.spx">[UK] admiration</a>
</>

source2.txt.

我们想生产

admiration    
<a style="color: darkblue; text-decoration: none" href="sound://admiration_Uk.spx">[UK] ad‧mi‧ra‧tion</a>
</>

output.txt.

基本上预期的输出是source2.txt,并在单词中添加了连字符。 sed -i s/&lt;original text&gt;/&lt;replaced text&gt;/g source1.txt 将能够在单个文件中查找和替换字符串。但是,我们如何匹配数据条目并将字符串source2.txt替换为source1.txt中的字符串?

sedawk 等工具或命令是否能够比较两个文件并替换字符串?否则,我们能不能有一个程序来做这样的任务?

【问题讨论】:

可以在连字符的周围加上[UK]之类的其他字符串吗? 我认为是这样,只要在最终输出中显示连字符即可。 【参考方案1】:

使用sed,您可以从source1 创建一个变量,然后在source2 中的替换中使用它

sr1=$(sed -n 's|.*>\(.[^<]*\).*|\1|p' source1.txt

这将提取连字符

echo $sr1
ad-mi-ra-tion

现在您可以替换 source2 中的变量

sed -E "s|(.*] ).*(<.*)|\1$sr1\2|" source2.txt > output.txt

输出

admiration
<a style="color: darkblue; text-decoration: none" href="sound://admiration_Uk.spx">[UK] ad-mi-ra-tion</a>
</>

【讨论】:

感谢您的建议。它适用于一次替换一个单词。然而,在字典数据库中,有成千上万的词条。如何实现自动化和重复这样的过程? @AlvinTang 不客气。您可能需要一个循环,我建议您根据新要求提出一个新问题。请务必包含您迄今为止尝试过的解决方案。

以上是关于我们如何在匹配两个文本文件时查找和替换单词?的主要内容,如果未能解决你的问题,请参考以下文章

python如何查找两个文本文件之间的所有单词匹配

查找哈希集中每个单词在文本文档中出现的次数

在 HTML 标记的文本内容中查找单词/文本并用突出显示标记替换匹配项的可靠方法是啥?

quarter2软件查找替换在哪

根据文本文件的名称查找和替换文本文件中的单词

如何在 Visual Studio Code 中查找和替换所有匹配项(在所有文件中)?