免费注册 查看新帖 |

Chinaunix

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

还是在行首添加空格的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-24 11:32 |只看该作者 |倒序浏览

  1. 。。。。。。

  2. # program A start
  3.   echo a
  4.   echo b
  5.   echo c
  6.   echo d
  7.   .....
  8. # program A end

  9. # program B start
  10. echo 1
  11. echo 2
  12. # program B end

  13. 。。。。。。
复制代码


program A这一段里有几十行代码,每行代码前面有2个空格,现在需要在program A里把除了第一行以外的所有行前面再增加2个空格,不知道这个怎么写?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
2 [报告]
发表于 2009-07-24 11:52 |只看该作者
  1. sed  '/^# program A start/{n;n;:a;s/.*/  &/;n;/^# program A end/!ba}' urfile
复制代码

论坛徽章:
0
3 [报告]
发表于 2009-07-24 11:54 |只看该作者
  1. awk '/# program A start/{T=1}/# program A end/{T=0}T{n++;if (n>1) sub(/^/,"  ")}1' file
复制代码


改正一下 n>2才对

[ 本帖最后由 ywlscpl 于 2009-7-24 12:01 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-07-24 15:20 |只看该作者
原帖由 Minsic 于 2009-7-24 11:52 发表
sed  '/^# program A start/{n;n;:a;s/.*/  &/;n;/^# program A end/!ba}' urfile



这段程序在使用中有额外的问题,就是如果program A里内容为空:

  1. # program A start
  2. # program A end

  3. # program B start
  4. echo 1
  5. echo 2
  6. # program B end
复制代码


运行结果是# program A end后面所有行都被加了两个空格。

论坛徽章:
0
5 [报告]
发表于 2009-07-24 15:30 |只看该作者
原帖由 ywlscpl 于 2009-7-24 11:54 发表
awk '/# program A start/{T=1}/# program A end/{T=0}T{n++;if (n>1) sub(/^/,"  ")}1' file

改正一下 n>2才对



awk '/# program A start/{T=1}/# program A end/{T=0}T{n++;if (n>2) sub(/^/,"  ")}1' file
这条语句可以执行,但是它并没有实际写入file啊,我希望能直接写入 file,谢谢。

论坛徽章:
0
6 [报告]
发表于 2009-07-24 15:35 |只看该作者

回复 #5 sailer_sh 的帖子

awk不能直接改文件

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
7 [报告]
发表于 2009-07-24 15:39 |只看该作者

回复 #4 sailer_sh 的帖子

那可以稍微改一下:

  1. sed  '/^# program A start$/{n;/^# program A end$/bc;n;/^# program A end$/bc;:a;s/.*/  &/;n;/^# program A end$/!ba;:c}' urfile
复制代码

[ 本帖最后由 Minsic 于 2009-7-24 15:41 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-07-24 15:42 |只看该作者
  1. sed '/program A start/{n;:a;/program A end/!{N;ba};/program A end/{s/\n/&  /g};s/  # program A end/# program A end/}' urlfile
复制代码

[ 本帖最后由 nuclearxin 于 2009-7-24 16:59 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2009-07-24 15:47 |只看该作者
费那事干嘛?

直接vi打开
定位到A start行,看看行号为num1
定位到A end行,看看行号为num2
然后运行命令:
:num1,num2 s/^/  /

论坛徽章:
0
10 [报告]
发表于 2009-07-24 15:54 |只看该作者
[root@oratest ~]# more sss
# program A start
   echo a
   echo b
   echo c
   echo d
[root@oratest ~]# sed '1!s/.*/  &/' sss
# program A start
       echo a
       echo b
       echo c
       echo d

这样?

[ 本帖最后由 asmboy001 于 2009-7-24 15:56 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP