日期:2014-05-16  浏览次数:20866 次

看看这4个sed命令
1、echo $@ | sed "s,-v ,,g; s,-v$,,g"
2、echo "$@" | sed 's/ /\ /g'
3、sed -n -e "/^include.*(.*)/s/include.*(\(.*\)).*$/\1/p"
4、sed 's,^\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*,\1,'

sed参数看起来太繁杂了,有双引号,还有单引号,有逗号,还有分号……
谁能讲讲这4个命令的意思?(需要指出单引号、双引号的不同)。

------解决方案--------------------
sed里的s/.../...中的/可以用任何其他符号代替,比如s@...@...和s/.../...是一样的。

所以,你见到的:

1,s/-v//g ,删除所有的-v; s/-v$//g 删除所有结尾的-v。
2, 删除所有的空格
3,有点乱,再说!
4, 替换YYY.XXX.XXX.XXX为YYY,

------解决方案--------------------
第三个的意思是,保留include开头行后面括号中的内容。
Perl code

[www@www ~]$ echo "include ([color=#FF0000]the is the result[/color])"|sed -n -e "/^include.*(.*)/s/include.*(\(.*\)).*$/\1/p"
[color=#FF0000]the is the result[/color]

------解决方案--------------------
1
# later cache the command line in config.status
OPT_CMDLINE=`echo $@ | sed "s,-v ,,g; s,-v$,,g "`
多用在configure中,来缓存命令行。基本上可以理解为将-v去掉
------解决方案--------------------
学习了。
单引号是强引用,对里面的引用不做扩展。双引号可以扩展变量
------解决方案--------------------
每个都动手试试
------解决方案--------------------
探讨

引用:

学习了。
单引号是强引用,对里面的引用不做扩展。双引号可以扩展变量

为什么sed手册没有体现这一点?难道是shell命令的通用语法?