免费注册 查看新帖 |

Chinaunix

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

模擬命令的腳本 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-07-03 16:53 |只看该作者
原帖由 Edengundam 于 2007-7-2 22:20 发表




你知道我只尽量使用每种命令最基本的命令集...也懒得去学各种扩展我的脑袋要爆炸了..呵呵

我都是知道有这么个东西,用时现查……

论坛徽章:
0
12 [报告]
发表于 2007-07-03 17:49 |只看该作者

  1. perl -e 'print "\u\L$_"'
复制代码

去下新版sed
支持一下

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
13 [报告]
发表于 2008-02-01 19:28 |只看该作者
原帖由 r2007 于 2007-7-2 20:31 发表
sed的进化真快,这是传统的方法
#!/bin/sed -f
s/$/\naAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/
:a
s/\b\([a-z]\)\(.*\n.*\)\1\(.\)/\3\2\1\3/                                       
ta
...


今天又来“盗墓”,顺便也写点“笔记”。^_^
最近才知道gsed的一些扩展,和7兄一样为“进化”而惊异。在楼主提出的这个问题上,sed已经完全可以做到和perl一样优雅:
sed 's/.*/\L\u&/'
但下面这样不行:
sed 's/.*/\u\L&/'
后面作用范围大的\L会覆盖掉前面作用范围小的\u的效果。但写成下面这样不相连的形式是可以的,和楼主给出的差不多:
sed -r 's/(.)(.*)/\U\1\L\2/'

看来perl的处理和sed还是有所不同:
perl -ne 'print "\u\L$_"'
和:
perl -ne 'print "\L\u$_"'
完全等价,两个相连的设定会起一个叠加的效果,不会互相覆盖。

另外sed和perl一样都支持\E断言,终止前面所作的大小写设定。所以如果要首字符大写,其它不变,可以写成:
sed -r 's/(.)(.*)/\U\1\E\2/'
perl版:
perl -pe 's/(.)(.*)/\U\1\E\2/'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP