sed 一些用法
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