Chinaunix

标题: 这个不会匹配了,帮帮忙 [打印本页]

作者: ppiandy    时间: 2008-11-14 11:55
标题: 这个不会匹配了,帮帮忙
aa=bb:cc//10.10.10.1:21/abc


匹配ip和端口号

10.10.10.1:21替换成10.10.0.2:21
作者: ly5066113    时间: 2008-11-14 11:56
echo 'aa=bb:cc//10.10.10.1:21/abc' | sed 's/10.10.10.1:21/10.10.0.2:21/'
作者: ppiandy    时间: 2008-11-14 15:11
原帖由 ly5066113 于 2008-11-14 11:56 发表
echo 'aa=bb:cc//10.10.10.1:21/abc' | sed 's/10.10.10.1:21/10.10.0.2:21/'





大锅,不是这个样子的
上边一句是文件里的一句
要匹配出来进行替换,我只是表达式不会写
作者: ILoveMK    时间: 2008-11-14 15:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: ly5066113    时间: 2008-11-14 15:20
原帖由 ppiandy 于 2008-11-14 15:11 发表





大锅,不是这个样子的
上边一句是文件里的一句
要匹配出来进行替换,我只是表达式不会写


sed '/10\.10\.10\.1:21/s/10.10.10.1:21/10.10.0.2:21/'
作者: ppiandy    时间: 2008-11-14 15:22

1111111111111111111
aa=bb:cc//10.10.10.1:21/abc
22222222222222222
33333333333333333
这样一个文本,我要匹配出aa这行,替换10.10.10.1:21为我用的变量,这回明白不?
sed "/aa/s#[^/]*\:[^/]#10.10.10.1:20#" file

红的表达式我不会写,谁帮我一下,谢谢

[ 本帖最后由 ppiandy 于 2008-11-14 15:33 编辑 ]
作者: ruifox    时间: 2008-11-14 15:24
原帖由 ppiandy 于 2008-11-14 15:11 发表





大锅,不是这个样子的
上边一句是文件里的一句
要匹配出来进行替换,我只是表达式不会写


大锅,真是饭来都不知道张口啊!
作者: ppiandy    时间: 2008-11-14 15:24
原帖由 ly5066113 于 2008-11-14 15:20 发表


sed '/10\.10\.10\.1:21/s/10.10.10.1:21/10.10.0.2:21/'




前边的可以根据aa查询,被替换的可以用正则表达式表示么,我不知道应该怎么写

多谢tim
作者: ppiandy    时间: 2008-11-14 15:27
原帖由 ruifox 于 2008-11-14 15:24 发表


大锅,真是饭来都不知道张口啊!




表这么说,俺只是想速成点,这样看例子学习速度很快地

然后在自己看书就能贯通了,俺不是有点就上来问地,实在想不通才问

大锅
作者: merlin852    时间: 2008-11-14 15:28
原帖由 ruifox 于 2008-11-14 15:24 发表


大锅,真是饭来都不知道张口啊!




作者: ruifox    时间: 2008-11-14 15:34
原帖由 ppiandy 于 2008-11-14 15:27 发表




表这么说,俺只是想速成点,这样看例子学习速度很快地

然后在自己看书就能贯通了,俺不是有点就上来问地,实在想不通才问

大锅


呵呵!是俺错怪你了!

sed -n '/aa/s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}:21/10.10.10.1:20/p' file
作者: ly5066113    时间: 2008-11-14 15:35
sed '/^aa/s@/[^/]\+/@/10.10.10.1:20/@'
作者: ppiandy    时间: 2008-11-14 15:43
原帖由 ly5066113 于 2008-11-14 15:35 发表
sed '/^aa/s@/[^/]\+/@/10.10.10.1:20/@'




貌似不对
作者: ppiandy    时间: 2008-11-14 15:47
原帖由 ruifox 于 2008-11-14 15:34 发表


呵呵!是俺错怪你了!

sed -n '/aa/s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}:21/10.10.10.1:20/p' file




这个貌似也不对

如果文件里是192的地址,你就得改sed了,不通用匹配
作者: ruifox    时间: 2008-11-14 15:48
原帖由 ppiandy 于 2008-11-14 15:43 发表




貌似不对


可能又是shell版本的问题:
sed -n '/^aa/s@/[^/]\{1,\}/@/10.10.10.1:20/@p'
作者: ruifox    时间: 2008-11-14 15:49
原帖由 ppiandy 于 2008-11-14 15:47 发表




这个貌似也不对

如果文件里是192的地址,你就得改sed了,不通用匹配


不用呀,本来就能匹配,请先测试一下!
作者: ILoveMK    时间: 2008-11-14 15:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: ppiandy    时间: 2008-11-14 15:54
原帖由 ly5066113 于 2008-11-14 15:35 发表
sed '/^aa/s@/[^/]\+/@/10.10.10.1:20/@'




可以了,前边有空格,删去前边得矛就应该可以了


[^/]\+/  给解释解释吧,谢谢

为什么不能用*要用+
作者: ynchnluiti    时间: 2008-11-14 15:58
原帖由 ppiandy 于 2008-11-14 15:54 发表




可以了,前边有空格,删去前边得矛就应该可以了


[^/]\+/  给解释解释吧,谢谢

为什么不能用*要用+

1或多个,至少1个不是/的字符
作者: ynchnluiti    时间: 2008-11-14 16:01
原帖由 ILoveMK 于 2008-11-14 15:52 发表
sed -n  "/([0-9]+\.?)\{4\}/"p test.sh

不明白为什么我这条命令找不出任何东西?

test.sh:

aa=bb:cc//10.10.10.1:21/abc

sed -n  '/\([0-9]\+\.\?\)\{4\}/p'

或者
sed -nr '/([0-9]+.?){4}/p'
作者: ppiandy    时间: 2008-11-14 16:04
也就是说要取[^/]或者[^/]*后边的值必须有一个实际的字符做定位是么?

它俩可以理解为以/为分隔的前面或者后面的字符串,不包括/本身
作者: ynchnluiti    时间: 2008-11-14 16:33
原帖由 ppiandy 于 2008-11-14 16:04 发表
也就是说要取[^/]或者[^/]*后边的值必须有一个实际的字符做定位是么?

它俩可以理解为以/为分隔的前面或者后面的字符串,不包括/本身

[^/]匹配非/字符,但没说个数。需要用?, +, *, {n,m}等修饰
[^/]* 是0个或多个非/字符
[^/]+ 是1个或多个非/字符

[^/]*会一直匹配到/的前一个字符(找不到/时匹配到行尾)。不包括/。
作者: ppiandy    时间: 2008-11-14 17:22
谢谢,总觉得吃不透似的,多学习
作者: ppiandy    时间: 2008-11-14 17:26
原帖由 ynchnluiti 于 2008-11-14 16:33 发表

[^/]匹配非/字符,但没说个数。需要用?, +, *, {n,m}等修饰
[^/]* 是0个或多个非/字符
[^/]+ 是1个或多个非/字符

[^/]*会一直匹配到/的前一个字符(找不到/时匹配到行尾)。不包括/。





[^/]*是前后匹配吧,默认都会匹配/前边得字符




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