Chinaunix
标题:
sed 替换行中指定位置的字符串
[打印本页]
作者:
巽离linux
时间:
2013-11-12 10:19
标题:
sed 替换行中指定位置的字符串
大家好!
我现在有个文件,第一行是这样子的:
somename (1234-0pattern11.2)
写的替换脚本是这个:
sed -i '1{s/pattern/shine/};ta;1{s/)/shine)/};:a' filename # 有pattern就替换,没有就直接在右括号前面加shine
但是,还有这种情况
pattern-somename (1234-0pattern11.2)
就将第一个pattern给替换成shine了
shine-somename (1234-0pattern11.2)
跟我想得到的结果不一样,实际想替换的是括号中的pattern
请问大家,怎么样可以定位到()里面匹配替换呢?
谢谢谢谢!
作者:
seesea2517
时间:
2013-11-12 10:37
是这样的效果吧:
[seesea@UC ~]# echo "somename (1234-0pattern11.2) " | sed '1{s/pattern/shine/};ta;1{s/)/shine)/};:a'
somename (1234-0shine11.2)
[seesea@UC ~]# echo "pattern-somename (1234-0pattern11.2) " | sed '1{s/pattern/shine/};ta;1{s/)/shine)/};:a'
shine-somename (1234-0pattern11.2)
[seesea@UC ~]# echo "pattern-somename (1234-0pattern11.2) " | sed '1{s/[^^]pattern/shine/};ta;1{s/)/shine)/};:a'
pattern-somename (1234-shine11.2)
复制代码
作者:
yestreenstars
时间:
2013-11-12 10:38
本帖最后由 yestreenstars 于 2013-11-12 10:42 编辑
[root@localhost ~]# cat i
pattern-somename (1234-0pattern11.2)
pattern-somename (1234-0test11.2)
[root@localhost ~]# sed -r 's/(\([^)]*)pattern([^)]*\))/\1shine\2/g;t;s/\)/shine&/' i
pattern-somename (1234-0shine11.2)
pattern-somename (1234-0test11.2shine)
[root@localhost ~]#
复制代码
作者:
reyleon
时间:
2013-11-12 10:43
本帖最后由 reyleon 于 2013-11-12 10:49 编辑
sed -r 's/(\(.*)pattern(.*\))/\1shine\2/;t;s/\)$/shine&/;'
复制代码
作者:
巽离linux
时间:
2013-11-12 10:46
seesea2517 发表于 2013-11-12 10:37
是这样的效果吧:
谢谢,是要这样的,能说明下 [^^] 是什么意思吗? 这种用法之前没碰到过
作者:
巽离linux
时间:
2013-11-12 10:48
reyleon 发表于 2013-11-12 10:43
我也一直想用标签来着,但是一直出错,谢谢啊,哈哈
作者:
巽离linux
时间:
2013-11-12 10:50
谢谢大家,这么快就解决了,生活太美好啦
作者:
小C_笑话
时间:
2013-11-12 19:47
我刚刚开始学,问下lz,这个ta :a 和1{}属于哪一块知识点呢?我刚学没见过
作者:
seesea2517
时间:
2013-11-13 09:35
回复
5#
巽离linux
这里有三个知识点:[] 表示一个符号集合,第二个 ^ 表示开头的锚点,第一个 ^ 表示对[]中的集合取反,即表示不在开头的位置了。如果其它的正则工具可以考虑使用零宽断言,但sed不支持所以就写的这么不好看了。
作者:
巽离linux
时间:
2013-11-14 17:51
回复
8#
小C_笑话
这是标签,:a定义标签位置。ta表示如果发生替换动作的话,就跳到这个标签来
作者:
巽离linux
时间:
2013-11-14 17:52
回复
9#
seesea2517
谢谢详细讲解
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2