grep檔案裡的特殊字元字串 - Linux

Victoria avatar
By Victoria
at 2014-10-16T23:02

Table of Contents

版友好

有個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不支援該語法


以上是自己測試的結果
謝謝版友幫忙








--
Tags: Linux

All Comments

Ida avatar
By Ida
at 2014-10-19T19:06
grep "~\!@#$%^&\*()_+ {}\[\]\||\\\:\";'<>?, /AZ"
Madame avatar
By Madame
at 2014-10-20T19:50
順帶一提這是bash下測的,會讓他變regex的都要esc掉
Hazel avatar
By Hazel
at 2014-10-21T01:27
hmmm...\[\]應該可以寫成\[]
George avatar
By George
at 2014-10-23T19:57
請使用 grep -F 就不會支援 regexp 了
Bennie avatar
By Bennie
at 2014-10-28T00:15
好招,不過你中間的"跟一開始的!還是要讓他跳掉
Isabella avatar
By Isabella
at 2014-10-31T04:42
謝謝樓上兩位回覆 明天回工作崗位在板子環境上做確認 感謝
Sandy avatar
By Sandy
at 2014-11-03T18:51
一般來說字串用單引號包起來,裡面的字元就不需要跳脫
Thomas avatar
By Thomas
at 2014-11-04T09:19
不過內容還有 ' 就需要另外考慮就是,所以看情況變化
Susan avatar
By Susan
at 2014-11-05T17:20
! 符號一般是 history 內項目,一般來說若暫時需要關閉
set +o histexpand 就可以避免單純用 ! 符號引起問題

在 Mint 17 安裝 Oracle Java 的方法

Kyle avatar
By Kyle
at 2014-10-15T10:08
2014 10 17 補充 : 以下是今天在 1 台 RAM 4G 的電腦上 使用 Live DVD 安裝 Oracle Java 的過程 作業系統 Linux Mint 17 Qiana Cinnamon 32 bit ( Live DVD ) 電腦 RAM 4G 先更新 Mint sudo apt- ...

請問這是什麼軟體?(類似簡報播放)

Edwina avatar
By Edwina
at 2014-10-15T00:14
之前在網路上看到一段linux教學影片 講師用的似乎是簡報播放軟體 因為在linux下沒特別用過 感覺挺方便的 不想用到全螢幕 可能隨時要切換到其他視窗做實作教學 每次都要從全螢幕切回來挺麻煩的 附圖如下 http://ppt.cc/qOfd 不知道有大大知道這是什麼軟體嗎? 可能圖片不能表示很清楚 還是有 ...

mint 17 mate 1.8 chrome看ted會有亂碼

Xanthe avatar
By Xanthe
at 2014-10-14T17:31
看ted時會有亂碼 google過安裝 uming字形 看ted 的在 chrome 裡 flash 會出現 crash的畫面 有辦法用跟chrome default的字形看且不會出現方塊嘛 謝謝 - ...

ssh可對外 但外面卻無法ssh回來 何解

Quintina avatar
By Quintina
at 2014-10-14T17:13
我有台機器最近新灌好 我很常用SSH做設定 親自跑到電腦前當然是比較不方便的 以前都沒這問題最近卻出現了 新灌的那台可以對外SSH(彼此之間都在同個DHCP下) 192.168.1.XXX都OK 可是外面要連回去 即使是192.168.1.1也不行 都會顯示 ssh:connect to hos ...

升級ubuntu後win7耳機掛點

Rosalind avatar
By Rosalind
at 2014-10-14T04:11
今天把ubuntu拿來升級 從12.04升到14.04 雖然不是很成功 卻也沒產生什麼嚴重的錯誤 沒想到回到win7 耳機沒聲音了 詳細點說明: 音效卡驅動正常、播放出聲音正常、耳機一插所有聲音都沒了 當然也不是什麼差錯洞還是開到靜音之類的有趣原因 在我拿realtek不同版本驅動程式開刀3-5次 ...