免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6668 | 回复: 8

请问sed可以匹配重复N次的字符串吗? [复制链接]

论坛徽章:
1
摩羯座
日期:2015-01-08 14:01:55
发表于 2009-03-31 21:34 |显示全部楼层
貌似在下表达能力不好,直接上例子。
cat file.txt
../../../../../music/Robbie Williams/Sing When You'Re Winning/Kids.mp3

比如这样一行字符,我要转换成以下格式:

~/music/Robbie Williams/Sing When You'Re Winning/Kids.mp3

在下只会用sed 's/\.\.\/.*\.\.\//~\//' file.txt实现。

sed里面,有匹配字符重复次数的写法,那有匹配字符串重复N次的写法吗???
假设可以匹配字符串重复,貌似是:
sed 's/\.\.\/\{4\}/~\//' file.txt

还有,我设置了变量匹配,也是不可以。
a=\.\.\/
sed "s/$a\{4\}/~\//' file.txt

请问可以用字符串匹配吗?如何匹配?
谢谢大家的回复。

论坛徽章:
0
发表于 2009-03-31 21:38 |显示全部楼层
原帖由 可恶的 于 2009-3-31 21:34 发表
貌似在下表达能力不好,直接上例子。
cat file.txt
../../../../../music/Robbie Williams/Sing When You'Re Winning/Kids.mp3

比如这样一行字符,我要转换成以下格式:

~/music/Robbie Williams/Sing  ...


  1. echo "../../../../../"|sed -r 's:(../){5}:~:'
复制代码

论坛徽章:
1
摩羯座
日期:2015-01-08 14:01:55
发表于 2009-03-31 21:44 |显示全部楼层
楼上的弟兄,谢谢你的答复啦。
我对正则里面的()用法不大了解,今天看到这种写法,对以前所不了解的sed类似语句都顿悟了。
再次感谢。

论坛徽章:
0
发表于 2009-03-31 21:51 |显示全部楼层
[test@ ~ ] $ sed -r 's#(../){5}#~/#' file.txt
~/music/Robbie Williams/Sing When You'Re Winning/Kids.mp3

论坛徽章:
0
发表于 2009-03-31 22:08 |显示全部楼层
如果处理的字符串本身有"/",可用其它的来代替分隔符,如#,@等

论坛徽章:
1
摩羯座
日期:2015-01-08 14:01:55
发表于 2009-03-31 22:21 |显示全部楼层
呵呵,谢谢大家的回复。
sed中用s替换的时候,好多符号都可以作为分割符,在下是对()的用法不了解,现在顿悟了。
再次感谢。

论坛徽章:
1
摩羯座
日期:2015-01-08 14:01:55
发表于 2009-03-31 22:24 |显示全部楼层
话说,如果没有-r这个--regexp-extended选项,就不能使用扩展的()匹配了,是吗?

论坛徽章:
0
发表于 2009-03-31 22:29 |显示全部楼层

回复 #7 可恶的 的帖子

-r只是简化了一些写法而已,一样可以用\(\)之类的

论坛徽章:
1
摩羯座
日期:2015-01-08 14:01:55
发表于 2009-03-31 22:38 |显示全部楼层

回复 #8 haimming 的帖子

嗯,后来看了下man,貌似和awk的--re-interval选项类似。
看样子,多看man才是王道,下次不偷懒了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP