免费注册 查看新帖 |

Chinaunix

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

一个彪悍的正则表达式问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-07 16:50 |只看该作者 |倒序浏览
今天在网上看到一个帖子:
问题:
我想把很多的音乐文件名变成首字母大写,其余小写。
比如:j.s. bach- jesus bleibet meine freude. 要将它变成J.S. Bach- Jesus Bleibet Meine Freude.
再如有些有括号的:heidenroslein (d257)要变成Heidenroslein (D257)
求这样的shell语言.

有人给出答案如下,但是我在linux下没有运行成功,貌似不是100%正确。求斧正,并求其他方法实现,语言和方式不限
ls -l|awk '{print $9}'  > file.lst

while read line;do

mv $line $(sed 's/(^| |\.|\()[a-z]/(^| |\.|\()[A-Z]/g'  $line)

done < file.lst

论坛徽章:
1
申猴
日期:2014-04-18 16:29:14
2 [报告]
发表于 2012-02-08 23:37 |只看该作者
lz发错版了。
用perl可以这么写
  1. s/(\b(\w))|((\w)\.)/\U$1/g;
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-02-09 15:18 |只看该作者
#!/bin/bash

#awk在不同linux发行版下效果可能不一致
#这里考虑到文件名中有空格,所以将前面的字段置空
ls -l | awk '{$1=""; $2=""; $3=""; $4=""; $5=""; $6=""; $7="";  print $0 }' > 1.files

while read fname
do
    #直接执行mv时,需要给适当的加上"。
    echo -n "MV :" $fname " TO:" `echo $fname | sed "s,\([0-9A-Za-z]\+\),\u\1,g"`
done < 1.files
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP