我们如何在匹配两个文本文件时查找和替换单词?
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/<original text>/<replaced text>/g source1.txt
将能够在单个文件中查找和替换字符串。但是,我们如何匹配数据条目并将字符串source2.txt
替换为source1.txt
中的字符串?
sed
或awk
等工具或命令是否能够比较两个文件并替换字符串?否则,我们能不能有一个程序来做这样的任务?
【问题讨论】:
可以在连字符的周围加上[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 不客气。您可能需要一个循环,我建议您根据新要求提出一个新问题。请务必包含您迄今为止尝试过的解决方案。以上是关于我们如何在匹配两个文本文件时查找和替换单词?的主要内容,如果未能解决你的问题,请参考以下文章