免费注册 查看新帖 |

Chinaunix

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

关于Vim的文本替换问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-12-16 22:56 |只看该作者
原帖由 gao86 于 2008-12-16 22:53 发表
你好,谢谢你的回复
用你的方法的可以改成a[1],b[0],
                                     a[2],b[0],
                                     a[3],b[0],
但b[0]没有改到.

%s/\d/\=line(".")-1/g
但是这种办法是把所有数字都改掉,而且你的a[0]是每行一个?

论坛徽章:
0
12 [报告]
发表于 2008-12-16 23:21 |只看该作者

回复 #11 walkerxk 的帖子

谢谢你的回复,
按照你的方法改完后是可以都改,但还是有问题第一个a[0],b[0],里的0是被改成"行号数减去1"的,
如果不是在第一行,如第5行就会被改成a[4],b[4]了.

论坛徽章:
0
13 [报告]
发表于 2008-12-16 23:38 |只看该作者

回复 #1 gao86 的帖子

:%s/源内容/替换内容/g

论坛徽章:
0
14 [报告]
发表于 2008-12-16 23:53 |只看该作者
正则表达式好深奥哦
唉..我是不会了

论坛徽章:
0
15 [报告]
发表于 2008-12-17 00:18 |只看该作者
i=0
while read l
do
echo $l|sed "s,a\[0\],a\[$i\],;s,b\[0\],b\[$i\],"
[[ $l =~ a\[0\] ]]&&((i++))
done<urfile
要求是a[0]和b[0]成对出现。

论坛徽章:
0
16 [报告]
发表于 2008-12-17 21:37 |只看该作者

回复 #15 walkerxk 的帖子

对于你所写的我看不懂,不过,我已经有点知道我该怎么做了

论坛徽章:
0
17 [报告]
发表于 2008-12-17 21:49 |只看该作者
谢谢回复我的人.

我用  Ns/\d/\=line(".")-N/gM.
N为从第N行开始,如果放空则为从光标的开始.
M为执行次数.
如:
行号
1
2    a[0],b[0],c[0],...
3    a[0],b[0],c[0],...   
4    a[0],b[0],c[0],...
5     

:2s/\d/\=line(".")-2/g3

我就可以把从第2行开始到第4行改成

行号
2   a[0],b[0],c[0];
3   a[1],b[1],c[1];
4   a[2],b[2],c[2];
5

Vim实在是太神奇了!

论坛徽章:
0
18 [报告]
发表于 2008-12-17 21:55 |只看该作者
s,a\[0\],a\[$i\],
把a[0]替换成a[$i]
[[ $l =~ a\[0\] ]]&&((i++))如果含有a[0],那么i就+1

论坛徽章:
0
19 [报告]
发表于 2008-12-17 21:56 |只看该作者
原帖由 gao86 于 2008-12-17 21:49 发表
谢谢回复我的人.

我用  Ns/\d/\=line(".")-N/gM.
N为从第N行开始,如果放空则为从光标的开始.
M为执行次数.
如:
行号
1
2    a[0],b[0],c[0],...
3    a[0],b[0],c[0],...   
4    a[0],b[0],c[0],. ...

但是如果第二行有,第三行为空呢?

论坛徽章:
0
20 [报告]
发表于 2008-12-17 22:21 |只看该作者

回复 #19 walkerxk 的帖子

是的,我这个只适合连续行,但对于我来说已经够用了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP