作者thisgo (寻梦园)
看板Linux
标题[问题] grep档案里的特殊字元字串
时间Thu Oct 16 23:02:47 2014
版友好
有个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
希望有遇过的版友
可以给一些建议
现在仍在尝试解决中
若一有解答会回报给大家
感谢
-------------------------------------------------------
今天试了板友的提示
环境是
ubuntu 10.04 / busybox v1.01
Ex: ~\!@#$%^&\*()\_+ {}\[\]|\\\:\";'<>?, /AZ`
当用grep
""(双引号), 搜寻字串包括
! * [ ` " \ 等字元, 将无法搜寻,
sol: 这些特殊字元前面需要加上\或\\
特别的是字元 " ` 前面加上\\有问题,
字元 \ 前面需要加上两个\\, ex: \=>\\\ (反斜线的双重escape)
ex: cat data.txt |grep "~
\!@#$%^&
\*()_+ {}
\[]|
\\\:
\";'<>?, /AZ"
若用grep
''(单引号), 搜寻字串包括
* [ ' \ 等字元, 将无法搜寻,
sol: 这些特殊字元前面需要加上\, (但不能加上两个\)
特别的是字元 ' 前面需要加上'"'", ex: ' => '"'"'
ex: cat data.txt |grep '~!@#$%^&
\*()_+ {}
\[]|
\\:";
'"'"'<>?, /AZ'
若用grep
$'\x27'继续延伸找结果, 则是busybox不支援该语法
以上是自己测试的结果
谢谢版友帮忙
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.243.103.132
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Linux/M.1413471770.A.A69.html
1F:→ Cypresslin: grep "~\!@#$%^&\*()_+ {}\[\]\||\\\:\";'<>?, /AZ" 10/16 23:48
2F:→ Cypresslin: 顺带一提这是bash下测的,会让他变regex的都要esc掉 10/16 23:50
3F:→ Cypresslin: hmmm...\[\]应该可以写成\[] 10/16 23:51
4F:推 kenduest: 请使用 grep -F 就不会支援 regexp 了 10/17 00:00
5F:→ Cypresslin: 好招,不过你中间的"跟一开始的!还是要让他跳掉 10/17 00:04
6F:→ thisgo: 谢谢楼上两位回覆 明天回工作岗位在板子环境上做确认 感谢 10/17 00:18
7F:→ kenduest: 一般来说字串用单引号包起来,里面的字元就不需要跳脱 10/17 00:21
8F:→ kenduest: 不过内容还有 ' 就需要另外考虑就是,所以看情况变化 10/17 00:23
9F:→ kenduest: ! 符号一般是 history 内项目,一般来说若暂时需要关闭 10/17 00:27
10F:→ kenduest: set +o histexpand 就可以避免单纯用 ! 符号引起问题 10/17 00:27
※ 编辑: thisgo (111.243.107.53), 10/17/2014 22:56:48