免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4676 | 回复: 14
打印 上一主题 下一主题

字符串翻转,使用sed [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-11 11:42 |只看该作者 |倒序浏览
在看以前的老帖子:http://bbs.chinaunix.net/viewthr ... 6&highlight=sed
其中有个字符串翻转的例子如下,不太明白,各位能不能给解释一下阿,谢谢了。
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

举例
echo 1234567890|sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
0987654321

论坛徽章:
0
2 [报告]
发表于 2009-03-11 11:47 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2009-03-11 11:49 |只看该作者
原帖由 "waker" 发表:
#反转一行中每个字符的顺序(类似"rev")
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
###假设一行文字是 123
###那么执行后模式空间中的内容应该按下边的顺序变化
执行/\n/!G;得
123\n
然后s/\(.\)\(.*\n\)/&\2\1/;

123\n23\n1
执行//D
23\n1
因为是D命令所以从头循环
模式空间有\n
所以/\n/!G;中G不执行
再来s...
23\n3\n21
再D
3\n21
循环,G不执行
再来s...
3\n\n321
再D
\n321
循环
G和s和D都不执行
执行最后的s/.//
321

哈哈,版版的解释

论坛徽章:
0
4 [报告]
发表于 2009-03-11 12:49 |只看该作者
原帖由 oldoger 于 2009-3-11 11:49 发表

哈哈,版版的解释



又要被我学习了!!

论坛徽章:
0
5 [报告]
发表于 2009-03-11 13:05 |只看该作者
来个awk的
  1. awk -F "" '{for (i=1;i<=NF;i++) a[i]=$i;for (i=NF;i>0;i--)  printf $i;print ""}' file
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2009-03-11 13:11 |只看该作者
sed -r ':a s/(^|\n)([^\n])([^\n]*)([^\n])(\n|$)/\1\4\n\3\n\2\5/;ta;s/\n//g'
比那个复杂一些

论坛徽章:
0
7 [报告]
发表于 2009-03-11 13:23 |只看该作者
echo "1234567"|sed -r ':a s/(^|#)([^#])([^#]*)([^#])($|#)/\1\4#\3#\2\5/;p;ta;s/#//g'
用\n不是太好理解,换一个#,加一个p

[ 本帖最后由 dream3401 于 2009-3-11 13:26 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
8 [报告]
发表于 2009-03-11 13:35 |只看该作者
原帖由 dream3401 于 2009-3-11 13:23 发表
echo "1234567"|sed -r ':a s/(^|#)([^#])([^#]*)([^#])($|#)/\1\4#\3#\2\5/;p;ta;s/#//g'
用\n不是太好理解,换一个#,加一个p

用\n的原因在于\n这个字符在一行中是不会出现的。
而用#
#123是无法翻转的

论坛徽章:
0
9 [报告]
发表于 2009-03-11 13:51 |只看该作者
原帖由 cjaizss 于 2009-3-11 13:35 发表

用\n的原因在于\n这个字符在一行中是不会出现的。
而用#
#123是无法翻转的

嗯,是的,我只是刚开始看到你的\n以后理解了好一会儿,为了便于不理解的人看懂,我用#换了一下,真正在应用中\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
10 [报告]
发表于 2009-03-11 14:01 |只看该作者
写个好理解的:

sed -r 'G;:a;s/(.)(\n.*)/\2\1/;ta;s/.//'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP