分字段替换--求助

sh/bash/dash/ksh/zsh等Shell脚本
回复
Messiya
帖子: 61
注册时间: 2009-12-02 15:49
送出感谢: 0
接收感谢: 0

分字段替换--求助

#1

帖子 Messiya » 2010-11-05 15:57

有类似下边的文本
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
头像
trigger
帖子: 1585
注册时间: 2006-10-25 18:08
送出感谢: 0
接收感谢: 0

Re: 分字段替换--求助

#2

帖子 trigger » 2010-11-05 16:44

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
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
头像
trigger
帖子: 1585
注册时间: 2006-10-25 18:08
送出感谢: 0
接收感谢: 0

Re: 分字段替换--求助

#3

帖子 trigger » 2010-11-05 17:00

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
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
gzbao9999
帖子: 627
注册时间: 2008-11-08 18:34
送出感谢: 0
接收感谢: 1 次

Re: 分字段替换--求助

#4

帖子 gzbao9999 » 2010-11-06 10:03

trigger:
[^^] :这个正则看不懂,看效果是从第一个.往后进行匹配
[]通常表示的是集合,还有其他解释?
给我讲讲吗
气血鼓荡,身体发胀,偶飘上头,三时舒畅
头像
trigger
帖子: 1585
注册时间: 2006-10-25 18:08
送出感谢: 0
接收感谢: 0

Re: 分字段替换--求助

#5

帖子 trigger » 2010-11-06 10:11

gzbao9999 写了:trigger:
[^^] :这个正则看不懂,看效果是从第一个.往后进行匹配
[]通常表示的是集合,还有其他解释?
给我讲讲吗
^一般来讲是行首,但在[]中如果用在开头则是“非”,那么[^^]就是“非行首”,由于这个[^^]本身占据了一个字符的空间,则“.”也被匹配了。 :em01
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
gzbao9999
帖子: 627
注册时间: 2008-11-08 18:34
送出感谢: 0
接收感谢: 1 次

Re: 分字段替换--求助

#6

帖子 gzbao9999 » 2010-11-08 11:53

.....理解失误
上次由 gzbao9999 在 2010-11-10 9:06,总共编辑 1 次。
气血鼓荡,身体发胀,偶飘上头,三时舒畅
tusooa
帖子: 6546
注册时间: 2008-10-31 22:12
系统: 践兔
送出感谢: 6 次
接收感谢: 10 次
联系:

Re: 分字段替换--求助

#7

帖子 tusooa » 2010-11-08 17:35

代码: 全选

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

代码: 全选

] ls -ld //
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: 分字段替换--求助

#8

帖子 aerofox » 2010-11-09 20:56

[^^] 是除了 ^ 以外的任意字符,在 [] 内部,^ 只有作为第一个字符才有意见,后一个 ^ 就是它本身了,不能代表行首。
gzbao9999
帖子: 627
注册时间: 2008-11-08 18:34
送出感谢: 0
接收感谢: 1 次

Re: 分字段替换--求助

#9

帖子 gzbao9999 » 2010-11-10 8:48

aerofox 写了:[^^] 是除了 ^ 以外的任意字符,在 [] 内部,^ 只有作为第一个字符才有意见,后一个 ^ 就是它本身了,不能代表行首。
你是对的
气血鼓荡,身体发胀,偶飘上头,三时舒畅
头像
trigger
帖子: 1585
注册时间: 2006-10-25 18:08
送出感谢: 0
接收感谢: 0

Re: 分字段替换--求助

#10

帖子 trigger » 2010-11-16 9:26

aerofox 写了:[^^] 是除了 ^ 以外的任意字符,在 [] 内部,^ 只有作为第一个字符才有意见,后一个 ^ 就是它本身了,不能代表行首。
学习了
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
MaskRay
帖子: 61
注册时间: 2010-04-29 22:00
系统: Gentoo Linux ~amd64
送出感谢: 0
接收感谢: 6 次
联系:

Re: 分字段替换--求助

#11

帖子 MaskRay » 2011-01-02 21:27

代码: 全选

#!/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
    }
}
回复

回到 “Shell脚本”