乐趣区

关于linux:sed中的转义字符

SED 命令中的特殊字符

SED 宰割符号

默认状况下,sed 的宰割符是反斜杠 (/),如 ’s/abc/xyz/g’,会把 abc 替换为 xyz,如下所示:

echo "this is abc" | sed 's/abc/xyz/g'
this is xyz

如果输出源中有宰割符,则咱们须要对宰割符进行本义,如下所示:

echo "this is /a/b/c" | sed 's/\/a\/b\/c/\/x\/y\/z/g'
this is /x/y/z

这样性能是能够实现,但看起来有点目迷五色,再长一些就很难读懂,特地是在输出源有门路的状况下,看起来更乱。而且写的时候略微不留神就错了,如少写了一个本义,则会报错。如下所示:

echo "this is /a/b/c" | sed 's//a\/b\/c/\x\/y\/z/g'
sed:-e 表达式 #1,字符 12:“s”的未知选项 

a 的后面少写了转义字符,则 sed 报错。
sed 是容许其余分隔符的:不论什么字符,紧跟着 s 前面的都会被认为是分隔符。如

[[email protected] ~]$ echo "this is /a/b/c" | sed 's#/a/b/c#/x/y/z#g'
this is /x/y/z
[[email protected] ~]$ echo "this is /a/b/c" | sed '[email protected]/a/b/[email protected]/x/y/[email protected]'
this is /x/y/z
[[email protected] ~]$ echo "this is /a/b/c" | sed 's!/a/b/c!/x/y/z!g'
this is /x/y/z
[[email protected] ~]$ echo "this is /a/b/c" | sed 's|/a/b/c|/x/y/z|g'
this is /x/y/z
[[email protected] ~]$ echo "this is /a/b/c" | sed 's_/a/b/c_/x/y/z_g'
this is /x/y/z

这些紧跟在 s 前面的字符(#、@、!、|、_) 都能够作为分隔符,换成这样的表达方式就会清晰很多,举荐应用竖线 (|)。当然,如果是输出源 / 输入内容中有分隔符,仍然须要应用反斜杠进行本义。

退出移动版