免费注册 查看新帖 |

Chinaunix

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

vi中替换字符串的问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-09-08 09:11 |只看该作者
%s/\(.*\)\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)\(.*\)\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)\(.*\)/\1\2\3'\4'\5/g

上述方法可以在vi中实现对第二列被匹配的时间内容进行操作。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
32 [报告]
发表于 2008-09-08 09:12 |只看该作者

回复 #29 ly5066113 的帖子

ly5066113 说的对。

awk '/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/{$6="<$6的值>";print $0}' cu.080906-01

<$6的值> 的$6为shell位置参数。
谢谢 ly5066113 指正!

论坛徽章:
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
33 [报告]
发表于 2008-09-08 09:14 |只看该作者
原帖由 li_haigang 于 2008-9-8 09:09 发表



黑哥,按照你的说法,我下边的写法应该会把第6列替换成replacement吧?但结果什么都没有输出。ERE是指“扩展正则表达式”吗?
awk '/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/{$6="replacement";print $0}' cu ...


对的,ERE是指“扩展正则表达式”。
因此,应该用[0-9]{4}这样的写法。

论坛徽章:
0
34 [报告]
发表于 2008-09-08 09:31 |只看该作者
越看越有点云里雾里了,ly5066113能不能给出来一个可以完整执行的语句看看呀

论坛徽章:
0
35 [报告]
发表于 2008-09-08 11:45 |只看该作者
这样写也比较直观明了,而且对于时间后面多少列也不用修改句子
cat file | while read p1 p2 p3;do echo $p1" '"$p2"' "$p3;done

论坛徽章:
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
36 [报告]
发表于 2008-09-08 12:52 |只看该作者
原帖由 无闻 于 2008-9-8 09:31 发表
越看越有点云里雾里了,ly5066113能不能给出来一个可以完整执行的语句看看呀


man awk
       r{n}
       r{n,}
       r{n,m}     One or two numbers inside braces denote an interval  expres-
                  sion.   If  there is one number in the braces, the preceding
                  regular expression r is repeated n times.  If there are  two
                  numbers  separated  by  a comma, r is repeated n to m times.
                  If there is one number  followed  by  a  comma,  then  r  is
                  repeated at least n times.
                  Interval expressions are only available if either --posix or
                  --re-interval is specified on the command line.

$ cat urfile
ccc aaa 2008-04-12 bbb fff 2008-04-18 fff
vvv aaa 2008-05-17 ccc fff  2008-09-17 fff
ggg ddd 2008-09-01 eee fff 2008-05-06 kkk
$ awk --posix '/[0-9]{4}-[0-9]{2}-[0-9]{2}/{$6="\047"$6"\047";print}' urfile
ccc aaa 2008-04-12 bbb fff '2008-04-18' fff
vvv aaa 2008-05-17 ccc fff '2008-09-17' fff
ggg ddd 2008-09-01 eee fff '2008-05-06' kkk

论坛徽章:
0
37 [报告]
发表于 2008-09-08 13:53 |只看该作者
多谢楼上的指点,自己试验一下去

论坛徽章:
0
38 [报告]
发表于 2008-09-08 15:44 |只看该作者
原帖由 ly5066113 于 2008-9-8 12:52 发表


man awk
       r{n}
       r{n,}
       r{n,m}     One or two numbers inside braces denote an interval  expres-
                  sion.   If  there is one number in the braces, the preced ...




如果实在无法在命令行完成awk操作就以awk脚本方式。这样是不是比较简单?
woodold 该用户已被删除
39 [报告]
发表于 2008-09-08 17:15 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
40 [报告]
发表于 2008-09-09 08:44 |只看该作者

xxx

:%s/ \(.*\) / '\1' /g
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP