求助中文替换问题

Vim、Emacs配置和使用
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 求助中文替换问题

#16

帖子 aerofox » 2012-03-29 19:18

cao627 写了: 做下概括:
在txtfile中 ,如何将匹配到的各行上的文本(这个文本可用一个正则表达式(设为REa)匹配到),替换为相应行上其他位置相应的文本(这个文本可用另一个正则表达式(设为REb)匹配到)

方法 1
用sed命令

代码: 全选

sed 's/\(otherRE\( REb \) otherRE \)REa/\1\2/' txtfile
其中\(otherRE\( REb \) otherRE \)要确保能匹配到行首到REa匹配到字符之前的全部内容
并不要求从行首开始匹配。
其实做这种个例总结,不如直接去理解正则表达式中各元字符的含义及s命令的用法。
s 命令中,查找内容为正则表达式,这就不多解释了。替换文本中,\1 表示查找表达式中从第一个 \( 到与之匹配的 \) 之间内容,\2 表示从第二个 \( 到与之匹配的 \) 之间内容
helex
帖子: 3
注册时间: 2009-09-16 14:10

Re: 求助中文替换问题

#17

帖子 helex » 2012-03-29 21:21

谢谢各位,没想到得到这么多回复。够我好好消化一阵了。
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 求助中文替换问题

#18

帖子 cao627 » 2012-03-29 21:33

并不要求从行首开始匹配
对! 而且从行首开始匹配反而是错的,当时没想清除

只要

代码: 全选

sed 's/\( REb \) .*)REa/\1\2/' txtfile
就行,即最外层匹配抓住REa和REb两头就好

但也只限于将行上位置在前的文本替换位子在后的文本

如果是后面的文本替换前面的比如
aaayyaaaxxaaa中的yy要替换为xx

代码: 全选

sed 's/yy\(.*\(xx\)\)/\2\1/'
即概括为:

代码: 全选

sed 's/REa\(.*\(REb\)\)/\2\1/'
回复