我有一大组(600 多个)搜索和替换术语,我需要将它们作为 sed 脚本运行在某些文件上。问题是搜索词不是正交的......但我想我可以通过按行长度排序来摆脱它(即首先拉出最长的匹配项,然后在每个长度内按字母顺序排列。所以给定一组未排序的:
aaba
aa
ab
abba
bab
aba
我想要的是一个排序的集合,例如:
abba
aaba
bab
aba
ab
aa
有没有办法通过在前面加上行长度并按字段排序来做到这一点?
对于奖励分数:-) !!!
查找和替换其实只是一个替换的情况
学期
和
_学期_
我要使用的 sed 代码是
s/term/_term_/g
我将如何编写正则表达式以避免替换 _ 对中已有的术语?
最佳答案
您可以将其全部压缩为一个正则表达式:
$ sed -e 's/\(aaba\|aa\|abba\)/_\1_/g'
testing words aa, aaba, abba.
testing words _aa_, _aaba_, _abba_.
如果我正确理解您的问题,这将解决您的所有问题:没有“双重替换”并且始终匹配最长的单词。