LinuxSir.cn,穿越时空的Linuxsir!

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

如何理解这个 sed命令

[复制链接]
发表于 2007-10-5 22:04:42 | 显示全部楼层 |阅读模式
mirrors=`sed -n 's/^Server = //; s,$,/'"$repo/os/i686/$file"', ; /^ftp/p; /^http/p' /etc/pacget.conf`
这个语句未见过,哪位理解的指点一下。引自
http://tech.ddvip.com/2007-02/117224029919729_2.html
本站也有。
 楼主| 发表于 2007-10-6 09:04:35 | 显示全部楼层
http://www.archlinux.org.cn/main/?q=node/81

----------------------------------------------------------
  mirrors=`sed -n 's/^Server = //; s,$,/'"$file"', ; /^ftp/p; /^http/p' /etc/pacman.d/$repo`

???
回复 支持 反对

使用道具 举报

发表于 2007-10-6 23:19:59 | 显示全部楼层
首先使用反引号表示命令替换,就是把sed -n 's/^Server = //; s,$,/'"$repo/os/i686/$file"', ; /^ftp/p; /^http/p' /etc/pacget.conf 这条命令的输出赋值给mirrors这个变量,当然最后的换行会去掉,-n 表示停止sed默认的输出当前行,这条命令执行的任务是把开头的Server=去掉,然后在行尾加上/$repo/os/i686/$file进行变量替换后的值,然后把以ftp或者http开头的行打印出来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-7 15:05:27 | 显示全部楼层
谢谢楼上的解析。但我还有一点不明白,就是它的命令格式是怎样的。其中的,;是起什么作用的。; s.$./是怎样的命令格式。我查过一些英文的文档,还是找不到说明。其中有说到,;等可以作为地址的使用,但在这个句子中怎样解析。
一般的S命令为如在行尾加上aa
sed -e 's/$/aa/  /etc/pacget.conf
怎样也套不上。这个; s,$,/'"$repo/os/i686/$file"', ; 里面的就很难明白。
回复 支持 反对

使用道具 举报

发表于 2007-10-7 17:25:12 | 显示全部楼层
在这里逗号的作用起的作用和/是一样的作用,分号是语句分隔符,'s/^Server = //; s,$,/'"$repo/os/i686/$file"', ; /^ftp/p; /^http/p' 这里包括用引号分割的三部分,第一部分用单引号,不进行变量替换,第二部分双引号会进行变量替换,第三部分和第一个一样。shell在去掉引号好会把这三部分合在一起,假设repo=core,file=t1.tbz,会转换为
s/^Server = //; s,$,/core/os/i686/t1.tbz, ; /^ftp/p; /^http/p
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-10 17:41:20 | 显示全部楼层
收下了,谢谢.我拿来用了.
回复 支持 反对

使用道具 举报

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

本版积分规则

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