查找并替换

查找并替换

我有2个文件。 file1.txt 中的第一列(以“,”分隔)与 file2.txt 中的第一列相同。我想比较这两个文件并替换 file2.txt 中 file1.txt 中的第二列

文件1.txt

ABC-aBc-AbC,abc-abc-abc
AAA-AAA-AAA,aaa-aaa-aaa

文件2.txt

文本文本ABC-aBc-AbC文字 文字 文字AAA-AAA-AAA文本文本。

答案1

我假设您的意思是,这file2.txt是一个自由格式的文本文件,可能包含来自 的第一列字符串的实例file1.txt,并且您希望将它们替换为相应的第二列字符串。

如果file1.txt不包含任何正则表达式特殊字符,那么一种相当有效的方法可能是将其转换为 sed 脚本,然后将 sed 脚本应用于第二个文件,即

sed 's/.*/s,&,g/' file1.txt | sed -f- file2.txt
text text abc-abc-abc text text text aaa-aaa-aaa text text.

或者,(这次假设 中的字符串file2.txt是空格分隔的)您可以根据 中的条目构建一个查找表file1.txt,然后循环 的字段file2.txt并进行相应的替换:

awk -F, 'NR==FNR {a[$1]=$2; next} {for (i=1;i<=NF;i++) {if ($i in a) $i = a[$i]}} 1' file1.txt FS='[ \t]+' file2.txt
text text abc-abc-abc text text text aaa-aaa-aaa text text.

或者

awk -F, 'NR==FNR {a[$1]=$2; next} {for (i=1;i<=NF;i++) {$i = $i in a? a[$i] : $i}} 1' file1.txt FS='[ \t]+' file2.txt
text text abc-abc-abc text text text aaa-aaa-aaa text text.

相关内容