顶替基于字典的文本(replace text based on a dictionary)

2019-09-20 06:59发布

我需要做类似这样的职位(但与一捻)的东西。 这就是为什么我问。

UNIX外壳:用词典代替

我有一本字典(dict.txt)。 它是空间中分离出来,内容是这样的:

V7动量

多少B6

....

(第一列是关键,第2栏是值,在一定意义上)

我有一个用户文件(user.txt),它包含键(V7,B6等)的发生。 转折是,键不是在自己的列(所以在上面的帖子方法不适用)。

用户文件(user.txt)可以是视图作为字符流。 我只是想更换密钥(例如,V7),无论它们是由空间界或由值(动量)其它字符界的所有出现在字典中查找。

例如:

“我们有V7作为输入” - >应更改为 - >“我们必须势头输入”

“我们有somethingV7_as输入” - >应更改为 - >“我们有somethingMomentum_as输入”

Answer 1:

用法: awk -f foo.awk dict.dat user.dat
http://www.gnu.org/software/gawk/manual/html_node/String-Functions.html
http://www.gnu.org/software/gawk/manual/html_node/Arrays.html

NR == FNR {
  rep[$1] = $2
  next
} 

{
  for (key in rep)
    gsub(key, rep[key])
  print
}


Answer 2:

只要你的字典键仅仅包含字母数字字符,这Perl会做你的需要。

use strict;
use warnings;

open my $fh, '<', 'dict.txt' or die $!;
my %dict =  map { chomp; split ' ', $_, 2 } <$fh>;
my $re = join '|', keys %dict;

open $fh, '<', 'user.txt' or die $!;
while (<$fh>) {
  s/($re)/$dict{$1}/g;
  print;
}


Answer 3:

这可能会为你工作(GNU SED):

sed '/./!d;s/\([^ ]*\) *\(.*\)/\\|\1|s||\2|g/' dict.txt | sed -f - user.txt


文章来源: replace text based on a dictionary