Chinaunix

标题: sed:如何替换特定行的某个字符串? [打印本页]

作者: novemberrain    时间: 2007-07-06 14:53
标题: sed:如何替换特定行的某个字符串?
文本内容如下:
aaa bbb ccc 111 222 abc
eee fff ggg 111 222 efg
111 222
aaa ccc ddd 111 222 acd

需求:
在有aaa的行中,将 111 替换为 AAA,将 222 替换为 BBB
即,输出结果为:
aaa bbb ccc AAA BBB abc
eee fff ggg 111 222 efg
111 222
aaa ccc ddd AAA BBB acd

请问,用 sed 或其他方法怎么实现呢?谢谢!
作者: zhangkeyijian    时间: 2007-07-06 15:13
sed '/aaa/
{
s/111/AAA/g;
s/222/BBB/g;
}
' urfile
作者: novemberrain    时间: 2007-07-06 15:18
Thank you very much!
作者: vincentn    时间: 2007-07-06 15:25
sed '/^aaa/y/12/AB/' file
作者: novemberrain    时间: 2007-07-06 15:38
原帖由 vincentn 于 2007-7-6 15:25 发表
sed '/^aaa/y/12/AB/' file

谢谢!能解释一下y这个命令是什么意思吗?
作者: vincentn    时间: 2007-07-06 16:31
字符转换

如: y/123/abc/   

将一行出现所有的1转换成a,2转换成b,3转换成c

典型应用: y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
作者: novemberrain    时间: 2007-07-06 18:31
原帖由 vincentn 于 2007-7-6 16:31 发表
字符转换

如: y/123/abc/   

将一行出现所有的1转换成a,2转换成b,3转换成c

典型应用: y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/


TKS
如果单是字符转换,使用y很方便,但是字符串就不行了吧。
例如,如果我的需求中将 "111" 替换成 "some strings",使用y就不可以了吧
作者: __lxmxn__    时间: 2007-07-07 00:58
原帖由 novemberrain 于 2007-7-6 18:31 发表


TKS
如果单是字符转换,使用y很方便,但是字符串就不行了吧。
例如,如果我的需求中将 "111" 替换成 "some strings",使用y就不可以了吧

不行
作者: creat7151    时间: 2007-07-09 15:18
又学会一招。
作者: 小N哥哥    时间: 2007-07-09 16:17
原帖由 vincentn 于 2007-7-6 15:25 发表
sed '/^aaa/y/12/AB/' file

逻辑上也有错误吧,你的意思以aaa开头的行才替换,不是以aaa开头的行不替换。
作者: Azhuangel    时间: 2007-07-09 17:02
原帖由 小N哥哥 于 2007-7-9 16:17 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7026866&ptid=958751][img]逻辑上也有错误吧,你的意思以aaa开头的行才替换,不是以aaa开头的行不替换。


去掉^就可以了啊。

sed '/aaa/y/12/AB/' file




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