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後面的字符(#、@、!、|、_)都可以作為分隔符,換成這樣的表達方式就會清晰很多,推薦使用豎線(|)。當然,如果是輸入源/輸出內容中有分隔符,依然需要使用反斜槓進行轉義。