我需要做类似这样的职位(但与一捻)的东西。 这就是为什么我问。
UNIX外壳:用词典代替
我有一本字典(dict.txt)。 它是空间中分离出来,内容是这样的:
V7动量
多少B6
....
(第一列是关键,第2栏是值,在一定意义上)
我有一个用户文件(user.txt),它包含键(V7,B6等)的发生。 转折是,键不是在自己的列(所以在上面的帖子方法不适用)。
用户文件(user.txt)可以是视图作为字符流。 我只是想更换密钥(例如,V7),无论它们是由空间界或由值(动量)其它字符界的所有出现在字典中查找。
例如:
“我们有V7作为输入” - >应更改为 - >“我们必须势头输入”
“我们有somethingV7_as输入” - >应更改为 - >“我们有somethingMomentum_as输入”
用法: 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
}
只要你的字典键仅仅包含字母数字字符,这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;
}
这可能会为你工作(GNU SED):
sed '/./!d;s/\([^ ]*\) *\(.*\)/\\|\1|s||\2|g/' dict.txt | sed -f - user.txt