免费注册 查看新帖 |

Chinaunix

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

在线急等一个工作中遇到的关于sed的问题,请老师们指教! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-12 09:30 |只看该作者 |倒序浏览
昨天boss分配一个任务,要从500多个文件(一个目录下的*.rdf)里提取一些信息(每个文件里提前一串字符,很有规律的),然后在某个文件phone.xml的每个节点内添加一行(一个子节点罗),该行的内容就是提取出来的信息,*.rdf的文件名称(不包括后缀)与phone.xml的节点是有严格对应关系的。
当初我考虑到这是一个很有规律的事情,而且我又刚好在学习shell,所以决定用shell脚本来折腾一番。谁知道功力太差,到现在还没弄出来。改写java代码来完成这个工作也来不及了,再过两个小时,boss就会催我了。(关键是我总觉得这个事情是可以用shell完成的,真的希望能得到老师们的指导!)
我碰到的关键问题时:
因为我能很容易的得到文件名称,以及该在此文件里提取的信息。所以这里就不说这两个步骤
fn="filename"#文件名称
content="to add"#在此文件里提取的信息
现在,我需要使用sed命令定位到phone.xml的一个叫做“<VendorModel>filename</VendorModel>"
的节点,这个节点的内容与我的变量fn的内容严格对应。!!!可是我不知道sed '//'这个种命令里面是否可以作变量替换,就是说我必须把$fn作为查询的条件!!有位老师告诉我把单引号变成双引号,我试了一次,还是不行!

定位道这个节点之后,我需要用sed命令在“<VendorModel>filename</VendorModel>"之后增加一行,内容是<size>${content}</size>,可是sed命令的a\命令里也是不可以作变量替换的(我不知道),(我需要使用content变量)。


如果以上的两处不可用变量替换的话,那我从昨天准备用shell完成这个任务就是个悲剧!或者各位老师可指导我用其它的命令实现。其实问题的逻辑真的简单,而且又非常有规律。

希望老师们指导,大恩不敢言谢!

论坛徽章:
0
2 [报告]
发表于 2006-01-12 10:01 |只看该作者
看来我可以帮你,等一会

论坛徽章:
0
3 [报告]
发表于 2006-01-12 10:09 |只看该作者
sed 中如何引用变量
1.使用双引号
例:在filettt中第一行附加一行,变量为ABC,注意a\后有一空格,这个空格你还要想法删除
sed "1 a\ $ABC" filettt
删除前面的空格,这两个功能组合在一起如下:
sed "1 a\ $ABC" filettt | sed 's/^  *//'
注:后面*前为两个空格

论坛徽章:
0
4 [报告]
发表于 2006-01-12 10:14 |只看该作者
兄弟,如果我的sed '//'里面的正则式子内部又含有/符号,该怎么办。我想到用\/屏蔽它。
str="Alcatel_EMS"
pat="'/<profileref>profiles/${str}.rdf</profileref>/'"
echo 'pat is:' $pat
sed $pat  zh\(old\).xml
现在报错:sed: -e expression #1, char 1: Unknown command: `''

论坛徽章:
0
5 [报告]
发表于 2006-01-12 10:21 |只看该作者
原帖由 rwx_hc 于 2006-1-12 10:09 发表
sed 中如何引用变量
1.使用双引号
例:在filettt中第一行附加一行,变量为ABC,注意a\后有一空格,这个空格你还要想法删除
sed "1 a\ $ABC" filettt
删除前面的空格,这两个功能组合在一起如下:
sed &q ...



the following works in my enviroment:

sed "1 a\\$ABC" filettt

论坛徽章:
0
6 [报告]
发表于 2006-01-12 10:30 |只看该作者
原帖由 pxpbba 于 2006-1-12 10:14 发表
兄弟,如果我的sed '//'里面的正则式子内部又含有/符号,该怎么办。我想到用\/屏蔽它。
str="Alcatel_EMS"
pat="'/<profileref>profiles/${str}.rdf</profileref>/'"
echo 'p ...

楼上的兄弟提醒了我
/和$你都要用\引用才行,还要注意其他产生岐义的字符
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP