LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 986|回复: 3

sed使用求助

[复制链接]
发表于 2006-4-1 15:06:04 | 显示全部楼层 |阅读模式
现在想对某一目录下有许多文件中包含地址信息的行进行更改,但这些地址信息又并不是固定的,例如:[PHP]DL_FROM    = $(URL_GNU)/gmp       //文件A
DL_FROM    = $(URL_AGNU)/grub    //文件B
DL_FROM    = http://www.cpan.org/src     //文件C[/PHP]
写了一个脚本,希望把所有DL_FROM后的内容全换成http://test.source.com:
[PHP]for I in `ls /home/share/temp/`; do
        SOURCE=`grep \^DL_FROM "$I" | awk '{print $3}'`
        OBJECT=http://test.source.com
        sed "s/$SOURCE/$OBJECT/"
done
[/PHP]但运行时却发觉sed在理解http://这样的信息时却不好使,有没有别的方法或思路,请各位指点下?:ask[/url]
发表于 2006-4-1 16:55:15 | 显示全部楼层
Post by epingnet
现在想对某一目录下有许多文件中包含地址信息的行进行更改,但这些地址信息又并不是固定的,例如:[PHP]DL_FROM    = $(URL_GNU)/gmp       //文件A
DL_FROM    = $(URL_AGNU)/grub    //文件B
DL_FROM    = http://www.cpan.org/src     //文件C[/PHP]
写了一个脚本,希望把所有DL_FROM后的内容全换成http://test.source.com:
[PHP]for I in `ls /home/share/temp/`; do
        SOURCE=`grep \^DL_FROM "$I" | awk '{print $3}'`
        OBJECT=http://test.source.com
        sed "s/$SOURCE/$OBJECT/"
done
[/PHP]但运行时却发觉sed在理解http://这样的信息时却不好使,有没有别的方法或思路,请各位指点下?:ask[/url]


在你SOURCE和OBJECT变量中存在分隔符 /,试着把sed中得分割符换成其他字符在试试看

  1. sed "s#$SOURCE#$OBJECT#"
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-1 17:34:02 | 显示全部楼层
OK,照楼上说的问题已解决,谢谢
不过下面的两行命令为什么第二行就能正确执行而第一不行?
[PHP]sed -e "s@ /$SOURCE@ /$OBJECT@"
sed -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@'[/PHP]
可是《linux 与 unix shell 编程指南》上却有如下用法,更加不懂了:beat
[PHP]sed "s/go/$REPLACE/g"[/PHP]
回复 支持 反对

使用道具 举报

发表于 2006-4-4 22:57:47 | 显示全部楼层
Post by epingnet
OK,照楼上说的问题已解决,谢谢
不过下面的两行命令为什么第二行就能正确执行而第一不行?
[PHP]sed -e "s@ /$SOURCE@ /$OBJECT@"
sed -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@'[/PHP]
可是《linux 与 unix shell 编程指南》上却有如下用法,更加不懂了:beat
[PHP]sed "s/go/$REPLACE/g"[/PHP]


仔细check一下替换SOURCE和OBJECT替换的结果吧

第二行中的字符dot(.) 会被认为所有字符,而不是字面意义上的dot(.)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表