Chinaunix

标题: 如何用sed进行条件匹配替换? [打印本页]

作者: winket_831104    时间: 2008-08-13 23:01
标题: 如何用sed进行条件匹配替换?
比如myfile中有若干下列格式
A B  100
A B  200
A B  50


如何用sed实现>=100的数字替换成1000,即希望的最终结果如下:

A B  1000
A B  1000
A B  50
作者: liaosnet    时间: 2008-08-13 23:05
awk好说~~sed不会~~

awk '{if($3>=100){print $1,$2,1000}else{print}}' ufile
作者: winket_831104    时间: 2008-08-13 23:11
标题: 回复 #1 winket_831104 的帖子
突然间想到一个
sed 's/^A[ |\t]*B[ |\t]*[1-9][0-9]\{2,\}/A B  1000/g' myfile

不知道行不行,明天验证去
作者: Shell_HAT    时间: 2008-08-13 23:11
awk可以吗?
  1. awk '{if ($3>=100) {print $1" "$2"  "1000} else print}' urfile
复制代码

作者: 爱知    时间: 2008-08-13 23:11
sed 's/[0-9]\{3,\}$/1000/' urfile

[ 本帖最后由 爱知 于 2008-8-13 23:12 编辑 ]
作者: Shell_HAT    时间: 2008-08-13 23:12
标题: 回复 #3 winket_831104 的帖子
可行

$ sed 's/^A[ |\t]*B[ |\t]*[1-9][0-9]\{2,\}/A B  1000/g' urfile
A B  1000
A B  1000
A B  50
作者: Shell_HAT    时间: 2008-08-13 23:22
标题: 回复 #5 爱知 的帖子
如果文本内容是这样的呢?

A B  100
A B  200
A B  50
A B  101 1

作者: leetaedong    时间: 2008-08-13 23:30
sed 's/[1-9][0-9]\{2,\}/1000/'

不知道可以达到你的要求不.
作者: 爱知    时间: 2008-08-13 23:31
标题: 回复 #7 Shell_HAT 的帖子
我只是回答一楼的情况
作者: 爱知    时间: 2008-08-13 23:32
原帖由 leetaedong 于 2008-8-13 23:30 发表
sed 's/[1-9][0-9]\{2,\}/1000/'

不知道可以达到你的要求不.

上面50没有用050表示,可以用[1-9]\{3,\}
作者: 寂寞烈火    时间: 2008-08-13 23:37
还是awk好使~~
作者: peckerwood    时间: 2008-08-13 23:38
原帖由 爱知 于 2008-8-13 23:32 发表

上面50没有用050表示,可以用[1-9]\{3,\}

应该是sed 's/[0-9]\{3,\}/1000/' 吧
作者: leetaedong    时间: 2008-08-13 23:50
大家意思知道就行了,结合具体的数据再去处理.
作者: xwmhmily    时间: 2008-08-14 00:11
AWK好懂,SED不好懂,乱
作者: li_haigang    时间: 2008-08-14 09:26
awk擅长处理此类问题。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2