语句中存在[].*+等特殊字符,想把这些特殊字符全部替换为“\原字符”(木有引号),sed语句该怎么写?
我想到的笨一点的办法是用多个管道,比如echo []. | sed 's#\[#\\&#g' | sed 's#\]#\\&#g' | sed 's#\.#\\&#g'是可以成功的,但我更想知道如何在一条sed语句中匹配多个特殊字符(可能会用|或[]吧)
另外请特别注意我用的是ksh(AIX的缺省shell),sed在ksh和bash中的使用方法略有不同,比如echo []. |sed -e 's/\[\|\]\|\./zzz/g'在bash中的结果是zzzzzzzzz,但在ksh中结果是[].,即sed没有匹配到任何一个字符。
另外还有一个问题是用grep检索文件时,如果给出的关键词含有特殊字符时(当然希望grep不要把它当做特殊字符处理),比较好的处理办法是什么,除了用sed匹配后在字符前加\?
>uname -v
6
[root@bruce3]/wideopen/stone
>oslevel -r
6100-01
[root@bruce3]/wideopen/stone
>echo $0
-ksh
我想到的笨一点的办法是用多个管道,比如echo []. | sed 's#\[#\\&#g' | sed 's#\]#\\&#g' | sed 's#\.#\\&#g'是可以成功的,但我更想知道如何在一条sed语句中匹配多个特殊字符(可能会用|或[]吧)
另外请特别注意我用的是ksh(AIX的缺省shell),sed在ksh和bash中的使用方法略有不同,比如echo []. |sed -e 's/\[\|\]\|\./zzz/g'在bash中的结果是zzzzzzzzz,但在ksh中结果是[].,即sed没有匹配到任何一个字符。
另外还有一个问题是用grep检索文件时,如果给出的关键词含有特殊字符时(当然希望grep不要把它当做特殊字符处理),比较好的处理办法是什么,除了用sed匹配后在字符前加\?
>uname -v
6
[root@bruce3]/wideopen/stone
>oslevel -r
6100-01
[root@bruce3]/wideopen/stone
>echo $0
-ksh