Regex 区分大小写用sed替换已知单词

Regex 区分大小写用sed替换已知单词,regex,sed,Regex,Sed,我需要用sed替换一组已知单词,但我必须保持原始单词的大小写敏感度。例如,“Abc”替换为“Def”,但“Abc”替换为“Def”。只有单词的第一个字母可以随大小写而变化(因此不允许使用aBC或aBC单词) 我知道如何使用每个单词2个regexp来实现这一点,但是否可以只使用每个单词1个regexp来实现呢?如果您使用的列表大于1000(abc->def,ghi->jkl,…),为什么不一步将其转换为>2000(abc->def,abc->def,ghi->jkl,ghi->jkl,…)(使用s

我需要用sed替换一组已知单词,但我必须保持原始单词的大小写敏感度。例如,“Abc”替换为“Def”,但“Abc”替换为“Def”。只有单词的第一个字母可以随大小写而变化(因此不允许使用aBC或aBC单词)


我知道如何使用每个单词2个regexp来实现这一点,但是否可以只使用每个单词1个regexp来实现呢?

如果您使用的列表大于1000(abc->def,ghi->jkl,…),为什么不一步将其转换为>2000(abc->def,abc->def,ghi->jkl,ghi->jkl,…)(使用sed'y'或其他工具)然后使用它?

您可以编写创建
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.

请为一个单词显示两个regex.2 sed命令:
s/abc/def/g
s/abc/def/g
一个单词不成问题,但我有1000多个……非常好,这正是我需要的。非常感谢你,丹尼斯!这太棒了,谢谢。在我的例子中,我做了以下操作:``sed-e's/ressender/ui/g;s/ressender/Ui/g'pom.xml``好主意,Dennis给出了具体的实现,谢谢你们