分页: 1 / 1

分字段替换--求助

发表于 : 2010-11-05 15:57
Messiya
有类似下边的文本
baicai.hangzhou.jiage.1
tudou.hangzhou.jiage.2
xigua.hangzhou.jiage.2
xigua.beijing.jiage.2
tudou.beijing.jiage.2

将第二列中的,hangzhou,beijing 替换为HZ,BJ。但是,如果在其他字段出现hangzhou或者beijing的时候,不去替换

xigua.hangzhou.hangzhoujiage.2
换为
xigua.HZ.hangzhoujiage.2
而不是
xigua.HZ.HZjiage.2

Re: 分字段替换--求助

发表于 : 2010-11-05 16:44
trigger
awk -F. '{if($2!="beijing") $2="HZ" ;else $2="BJ"}1' ufile|tr -s ' ' '.'
baicai.HZ.jiage.1
tudou.HZ.jiage.2
xigua.HZ.jiage.2
xigua.BJ.jiage.2
tudou.BJ.jiage.2

Re: 分字段替换--求助

发表于 : 2010-11-05 17:00
trigger
sed -e 's/[^^]hangzhou/.HZ/1' -e 's/[^^]beijing/.BJ/1' lines4
baicai.HZ.jiage.1
tudou.HZ.jiage.2
xigua.HZ.jiage.2
xigua.BJ.jiage.2
tudou.BJ.jiage.2

Re: 分字段替换--求助

发表于 : 2010-11-06 10:03
gzbao9999
trigger:
[^^] :这个正则看不懂,看效果是从第一个.往后进行匹配
[]通常表示的是集合,还有其他解释?
给我讲讲吗

Re: 分字段替换--求助

发表于 : 2010-11-06 10:11
trigger
gzbao9999 写了:trigger:
[^^] :这个正则看不懂,看效果是从第一个.往后进行匹配
[]通常表示的是集合,还有其他解释?
给我讲讲吗
^一般来讲是行首,但在[]中如果用在开头则是“非”,那么[^^]就是“非行首”,由于这个[^^]本身占据了一个字符的空间,则“.”也被匹配了。 :em01

Re: 分字段替换--求助

发表于 : 2010-11-08 11:53
gzbao9999
.....理解失误

Re: 分字段替换--求助

发表于 : 2010-11-08 17:35
tusooa

代码: 全选

sed -re 's/(^.+?\.)beijing\./\1BJ./;s/(^.+?\.)hangzhou\./\1HZ./'

Re: 分字段替换--求助

发表于 : 2010-11-09 20:56
aerofox
[^^] 是除了 ^ 以外的任意字符,在 [] 内部,^ 只有作为第一个字符才有意见,后一个 ^ 就是它本身了,不能代表行首。

Re: 分字段替换--求助

发表于 : 2010-11-10 8:48
gzbao9999
aerofox 写了:[^^] 是除了 ^ 以外的任意字符,在 [] 内部,^ 只有作为第一个字符才有意见,后一个 ^ 就是它本身了,不能代表行首。
你是对的

Re: 分字段替换--求助

发表于 : 2010-11-16 9:26
trigger
aerofox 写了:[^^] 是除了 ^ 以外的任意字符,在 [] 内部,^ 只有作为第一个字符才有意见,后一个 ^ 就是它本身了,不能代表行首。
学习了

Re: 分字段替换--求助

发表于 : 2011-01-02 21:27
MaskRay

代码: 全选

#!/usr/bin/expect --

spawn -noecho -open [open FILE r]
log_user 0
expect {
    -re "\[^\n]*\n" {
	set arr [split [string trimright $expect_out(0,string) \n] .]
	regsub -all beijing [lindex $arr 1] BJ a
	regsub -all hangzhou $a HZ a
	lset arr 1 $a
	puts [join $arr .]
	exp_continue
    }
}