免费注册 查看新帖 |

Chinaunix

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

shell 修改文件内容请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-09 22:36 |只看该作者 |倒序浏览
本帖最后由 enduser007 于 2012-07-09 23:00 编辑

各位大侠,小弟一个文件,谁的名为a.txt

内容如下:

.....
PROJECT   TEST_PROJECT
PROJECT_NAME   TEST
SOLUTION_FILE  C:\test\1.pkg
  SOLUTION_FILE  no
.........
     SOLUTION_FILE  C:\test\1.pkg
   ORG_SOLUTION_FILE  C:\backup\1.pkg

.......

其中  SOLUTION_FILE  和 ORG_SOLUTION_FILE  行的行首均有多个空格.

小弟想示一shell脚本
对于SOLUTION_FILE  一整行替换成 SOLUTION_FILE    C:\test\2.pkg,而不需要对ORG_SOLUTION_FILE  行进行修改,一直不怎么实现,请大侠们指点一下,多谢!

论坛徽章:
0
2 [报告]
发表于 2012-07-09 22:49 |只看该作者
  1. sed '/\bSOLUTION_FILE/s/1/2/' a.txt
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-07-09 23:01 |只看该作者
本帖最后由 enduser007 于 2012-07-09 23:02 编辑

谢谢 kk5234  的回复!

由于描述有一点错误,我修正了一下

就是前边 还有一行叫SOLUTION_FILE  no
的行!但不能修改这行!

论坛徽章:
0
4 [报告]
发表于 2012-07-10 00:08 |只看该作者
回复 2# kk5234


    我按你的方法打了一遍,没有反应。
    主要对\1\2这个不是很理解,和他的要求关系大不。
    给讲一下吧。谢谢

回复 3# enduser007


    我是这样写的
    #grep -v 'no' \
    >sed '/SOLUTION_FILE/s/^ *//'
   

论坛徽章:
0
5 [报告]
发表于 2012-07-10 09:13 |只看该作者
本帖最后由 kk5234 于 2012-07-10 09:14 编辑

回复 3# enduser007
  1. sed ':b;N;$!bb;s/1/2/' a.txt
复制代码
  1. sed '0,/SOLUTION_FILE/s/1/2/' a.txt
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-07-10 09:50 |只看该作者
觉得lz的需要的可能只是\b
如果区别只是1.pkg和2.pkg的话
  1. $sed '/\bSOLUTION_FILE/ s/1/2/ ' data
  2. PROJECT   TEST_PROJECT
  3. PROJECT_NAME   TEST
  4. SOLUTION_FILE  C:\test\2.pkg
  5.   SOLUTION_FILE  no
  6. .........
  7.      SOLUTION_FILE  C:\test\2.pkg
  8.    ORG_SOLUTION_FILE  C:\backup\1.pkg
复制代码

论坛徽章:
0
7 [报告]
发表于 2012-07-10 09:54 |只看该作者
回复 1# enduser007


    区别不只是1和2,整行替换
  1. personball@vostro:awk$sed 's/\bSOLUTION_FILE[ ]*C:.*/whatyouwanttobe/ ' data
  2. PROJECT   TEST_PROJECT
  3. PROJECT_NAME   TEST
  4. whatyouwanttobe
  5.   SOLUTION_FILE  no
  6. .........
  7.      whatyouwanttobe
  8.    ORG_SOLUTION_FILE  C:\backup\1.pkg
  9. personball@vostro:awk$
复制代码
如果盘符不都是C, 也可以用 [C-F]表示可能是CDEF盘sed 's/\bSOLUTION_FILE[ ]*[C-F]:.*/whatyouwanttobe/ ' data

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
8 [报告]
发表于 2012-07-11 09:14 |只看该作者
  1. sed '/no/!s/\(\bSOLUTION_FILE\).*/\1 C:\\test\\2.pkg/g' urfile
复制代码

论坛徽章:
0
9 [报告]
发表于 2012-07-11 09:47 |只看该作者
我怎么感觉不用那么复杂呢?楼主关心的实质性内容是什么啊?我发现,不知道是不是巧合啊,你给的例子里面每个你要修改的SOLUTION_FILE  C:\test\1.pkg
直接把这一段替换成SOLUTION_FILE    C:\test\2.pkg不就行了么?前面有空格的话,而ORG_SOLUTION_FILE  C:\backup\1.pkg

明显后面是back而不是test啊。。。
sed s不能直接搞定么?

论坛徽章:
0
10 [报告]
发表于 2012-07-11 11:16 |只看该作者
谢谢大家的帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP