用sed对已知单词进行区分大小写的替换

时间:2011-03-05 19:23:56

标签: regex sed

我需要用sed替换一组已知单词,但我必须保持原始单词的区分大小写。例如,“Abc”替换为“Def”,但“abc”替换为“def”。只有单词的第一个字母可以有所不同(因此不允许使用aBC或abC单词)。

我知道如何使用每个单词2个正则表达式执行此操作,但是每个单词只能使用1个正则表达式吗?

2 个答案:

答案 0 :(得分:4)

您可以编写sed脚本的脚本。假设一个单词对文件:

$ cat words.dat
apple pecan
banana walnut
cherry almond

和文本文件:

$ cat textfile.txt
apple
banana
cherry
I would like an apple pie. Cherry pies are good, too. What about bananas?
Bananas are full of potassium.

你可以这样做:

awk '{print "s/" tolower($1) "/" tolower($2) "/g;s/" toupper(substr($1,1,1)) tolower(substr($1,2)) "/" toupper(substr($2,1,1)) tolower(substr($2,2)) "/g"}' words.dat > sedscript.sed

sed脚本:

$ cat sedscript.sed
s/apple/pecan/g;s/Apple/Pecan/g
s/banana/walnut/g;s/Banana/Walnut/g
s/cherry/almond/g;s/Cherry/Almond/g

然后:

$ sed -f sedscript.sed textfile.txt
pecan
walnut
almond
I would like an pecan pie. Almond pies are good, too. What about walnuts?
Walnuts are full of potassium.

答案 1 :(得分:1)

如果你使用的是> 1000的列表(abc-> def,ghi-> jkl,...),为什么不把它变成> 2000的列表(abc-> def, Abc-> Def,ghi-> jkl,Ghi-> Jkl,...)在一个步骤中,(使用sed'y'或其他一些工具)并使用它?