免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: fttskyblue
打印 上一主题 下一主题

如何将匹配字符X替换成若干个X? [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
21 [报告]
发表于 2009-03-18 17:49 |只看该作者

回复 #17 ly5066113 的帖子

谢谢TIM,不过我还是喜欢用一行的形式。我知道16楼的语句在LINUX平台肯定可以跑成功,在AIX上我知道用多个-e可能也可以成功。能否麻烦你将16楼写成sed -e ... -e  ... -e  ... -e  ... 的形式让它在AIX上也能跑起来?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
22 [报告]
发表于 2009-03-18 18:01 |只看该作者
哦,我自己明白了。
1、凡是遇到table,都不能用“;”分割,必需用“-e”分割
2、要解决“There are too many '{'.”问题,可以先定义个FUNCTION,绕过问题
echo XXBBX| sed -e '1{x;:a' -e 's/^/Y/;/.\{3\}/!ta' -e 'x;}' -e 'G;:b' -e 's/X\(.*\n\)\(.*\)/\2\1\2/;tb' -e 's/\n.*//'

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
23 [报告]
发表于 2009-03-18 18:04 |只看该作者

回复 #21 beginner-bj 的帖子

sed -e ':a' -e 's/X/Y/g;s/Y/&&/g;/Y\{2\}/!ta'

AIX 上的sed版本比较老,它会把 a} 当作标签名,因此会抱 { 不匹配的错误

但就命令本身而言,是不能达到你预期的效果的,把2换成3就不行了

[ 本帖最后由 ly5066113 于 2009-3-18 18:05 编辑 ]

论坛徽章:
0
24 [报告]
发表于 2009-03-18 19:38 |只看该作者
终于明白了 sed中的label如何使用。谢谢楼上大哥们。

论坛徽章:
0
25 [报告]
发表于 2009-03-18 20:05 |只看该作者
学习下啊

论坛徽章:
0
26 [报告]
发表于 2009-03-18 20:32 |只看该作者
原帖由 ly5066113 于 2009-3-18 12:16 发表
sed -e ':a' -e 's/X/&&/;/X\{m\}/!ba' urfile


复习复习,谢了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
27 [报告]
发表于 2009-03-18 21:10 |只看该作者
sed的跨平台性很成问题,我越来越觉得没必要深入学习它,会简单的s就可以。其它的功能用awk、perl好了。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
28 [报告]
发表于 2009-03-19 08:56 |只看该作者

回复 #27 beginner-bj 的帖子

awk 跨平台也有问题的, 跨平台perl 当然是最好的选择。
不过,如果sed写成脚本,并且不使用 -i -r 参数,一般就不会有问题了。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
29 [报告]
发表于 2009-03-19 10:09 |只看该作者
awk的确也存在跨平台问题,不过不兼容的地方很少;sed就兼容问题多多了,除了 -i -r 参数外,遇到lable的地方都要注意,比如:
echo X | sed ':a;s/X/&&/;/X\{3\}/!ba' 在LINUX上可以,在AIX上就不可以,必需改成echo X | sed -e ':a' -e 's/X/&&/;/X\{3\}/!ba'

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
30 [报告]
发表于 2009-03-19 10:17 |只看该作者

回复 #29 beginner-bj 的帖子

sed 的不兼容主要是书写格式的问题,我觉得这个到不是很大的问题,写成脚本,基本都能解决。
awk 的问题则更大,最简单的:
AIX 下模式匹配可以这样写 /X{3}/
Linux 就一定要加 --posix 或者 --re-interval
而且Linux下扩展了很多参数、内置变量、函数
但sed的子命令则是没有扩展的,只是多了2个参数 -i -r
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP