[問題] 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