在写shell时使用sed处理一些输出,遇到两个问题,在网上找到了相应的解决办法,在此处备份一下。
[ sed处理空字符 ]
空字符,它的ASCII码值为0。在sed中如何标识空字符呢?看下面的例子:
find . -print0 | sed -e 's/\x0/\n/g'
在上面的例子中,find命令把当前目录下的文件名输出出来,以空字符分隔。输出被管道送给Sed进行处理。在sed中,则把空字符替换成回车符。
之所以用空字符做分隔符来分隔find命令的输出,是为了正确处理带空格的文件名。在上例中并没有体现出这点,我会在其它文章中说明。
[ sed使用shell中的变量 ]
在脚本中,有时希望在sed命令中使用shell定义的变量。在此时,就要用双引号而不是单引号来引用sed命令,因为对shell来说,它会处理双引号中的变量引用,而对单引号中的内容,shell完全不会动。例如:
TERM1=term; TERM2=rxvt; echo "term" | sed -e "s/$TERM1/$TERM2/g"
注意上例中的引号用法。如果改成单引号,输出结果会不同。
TERM1=term; TERM2=rxvt; echo “term” | sed -e “s/$TERM1/$TERM2/g”