sed 一些用法

31 一月, 2007 (13:30) | Note_Shell

1. 默认,sed 的缓冲是不回写的,呵呵,别学其他的命令,直接用重定向符,否则你就哭了,加个临时文件吧,操作完毕后删除临时文件.
    例如  sed ‘/str1/str2/s’ file1 > file1 ,你会发现你files里空了,呵呵,哭吧…….
    用管道 cat file1|sed ’s/str1/str2/’ >file1 也不行哦.
    用 sed ’s/str1/str2/’ 1 >temp ; mv temp 1 ; 吧
    或者 sed 虽然有写文件的命令  sed ’s/str1/str2/ w temp’ ;但仅仅用于处理过程中匹配的结果,例如temp的内容只会是替换出来的str2,而不是处理的最终结果.
     当然平时建议用cat file | sed ’s/str1/str2′  这样观察一下输出结果,然后考虑怎么去操作,而不要急着直接写入文件.切记不能回写.

2. 对于shell给sed传递参数和变量,
   今天写一个脚本,其中要将脚本的参数传递到sed中,发现sed默认是不行的,不匹配,而是将变量直接当字符串处理, $1 ,$2 ,这样,呵呵.处理也很简单,用双引号括起来就可以.例如 
    $./script1  ip MAC
     其中ip在shell中就默认为变量$1,MAC就是$2 了,
     在sed中使用 sed “/$1/”    , sed “/$MAC/”,就可以,如果还用 sed ‘/$1/’,是得不到结果,这样就会当成字符串$1来处理.在shell中自定义的变量也是如此……另外更详细的讨论参考下面   SED(带-E参数)变量传递问题

Write a comment





提示:如果你刚刚提交过评论,但是还没有被显示出来,请点击这里刷新一下: 刷新评论