[爆卦]跳脫字元\\是什麼?優點缺點精華區懶人包

為什麼這篇跳脫字元\\鄉民發文收入到精華區:因為在跳脫字元\\這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者thisgo (尋夢園)看板Linux標題[問題] grep檔案裡的特殊字元字串時間Thu Oc...

跳脫字元\\ 在 紅花大戲院 Instagram 的精選貼文

2021-09-17 17:09:17

/ 《尚氣與十環傳奇》:上善若水 Shang-Chi and the Legend of the Ten Rings, 2021 - 除了特別重要那幾部以外,MCU到中後期其實一直都給我種「在框架中做到最好」的感覺,跳不出舒適圈畫地自限,卻又在自我限制中做得超級認真,通常成果也可圈可點,就是那種平均...


版友好

有個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://www.ptt.cc/bbs/Linux/M.1413471770.A.A69.html
Cypresslin: grep "~\!@#$%^&\*()_+ {}\[\]\||\\\:\";'<>?, /AZ" 10/16 23:48
Cypresslin: 順帶一提這是bash下測的,會讓他變regex的都要esc掉 10/16 23:50
Cypresslin: hmmm...\[\]應該可以寫成\[] 10/16 23:51
kenduest: 請使用 grep -F 就不會支援 regexp 了 10/17 00:00
Cypresslin: 好招,不過你中間的"跟一開始的!還是要讓他跳掉 10/17 00:04
thisgo: 謝謝樓上兩位回覆 明天回工作崗位在板子環境上做確認 感謝 10/17 00:18
kenduest: 一般來說字串用單引號包起來,裡面的字元就不需要跳脫 10/17 00:21
kenduest: 不過內容還有 ' 就需要另外考慮就是,所以看情況變化 10/17 00:23
kenduest: ! 符號一般是 history 內項目,一般來說若暫時需要關閉 10/17 00:27
kenduest: set +o histexpand 就可以避免單純用 ! 符號引起問題 10/17 00:27
※ 編輯: thisgo (111.243.107.53), 10/17/2014 22:56:48

你可能也想看看

搜尋相關網站