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后面的都会被认为是分隔符。如

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

这些紧跟在s后面的字符(#、@、!、|、_)都可以作为分隔符,换成这样的表达方式就会清晰很多,推荐使用竖线(|)。当然,如果是输入源/输出内容中有分隔符,依然需要使用反斜杠进行转义。

猜你喜欢

转载自blog.csdn.net/EmptyStupid/article/details/127730010