[问题] grep档案里的特殊字符字串

楼主: thisgo (寻梦园)   2014-10-16 23:02:47
版友好
有个grep特殊字符的问题想请教
Q:
若想在档案里 搜寻特定字串如右 ~!@#$%^&*()_+ {}[]|\:";'<>?, /AZ
假设有一个随机档案data.txt内容是
AA="XXX223"
BB=a132423davqef1
CC='OOOOOOOO'
DD="~!@#$%^&*()_+ {}[]|\:";'<>?, /AZ"
EE=e12eee eqwf
发现因为特殊字符的关系 ex: * [
下面指令会出现问题
我试过
(双引号)
cat data.txt | grep "~!@#$%^&*()_+ {}[]|\:";'<>?, /AZ" => fail
(双引号, 特殊字符前面加\)
cat data.txt | grep "~!@#$%^&\*()_+ {}\[]|\:\";\'<>?, /AZ" => fail
(单引号)
cat data.txt | grep '~!@#$%^&*()_+ {}[]|\:";'<>?, /AZ' => fail
(为了解决单引号内 特殊字符'字符)
cat data.txt | grep $'\'' => 可以找到'
cat data.txt | grep $'~!@#$%^&\*()_+ {}\[]|' => 可以找到
cat data.txt | grep $'~!@#$%^&\*()_+ {}\[]|\' => 多了\, 就fail
目前用的shell是/bin/sh 不是bash
希望有遇过的版友
可以给一些建议
现在仍在尝试解决中
若一有解答会回报给大家
感谢
作者: Cypresslin (啊哈哈~~)   2014-10-16 23:48:00
grep "~\!@#$%^&\*()_+ {}\[\]\||\\\:\";'<>?, /AZ"顺带一提这是bash下测的,会让他变regex的都要esc掉hmmm...\[\]应该可以写成\[]
作者: kenduest (小州)   2014-10-17 00:00:00
请使用 grep -F 就不会支援 regexp 了
作者: Cypresslin (啊哈哈~~)   2014-10-17 00:04:00
好招,不过你中间的"跟一开始的!还是要让他跳掉
楼主: thisgo (寻梦园)   2014-10-17 00:18:00
谢谢楼上两位回复 明天回工作岗位在板子环境上做确认 感谢
作者: kenduest (小州)   2014-10-17 00:21:00
一般来说字串用单引号包起来,里面的字符就不需要跳脱不过内容还有 ' 就需要另外考虑就是,所以看情况变化! 符号一般是 history 内项目,一般来说若暂时需要关闭set +o histexpand 就可以避免单纯用 ! 符号引起问题

Links booklink

Contact Us: admin [ a t ] ucptt.com