逸出字元引發的血案(hive、bash)

來源:互聯網
上載者:User

hive hql:從一個字串“p?a?b?c?ppp?hhh”中以?作為分隔字元,找第5段字串

bash程式:

test.sh
#!/bin/bashhive -e "select (split('p?a?b?c?ppp?hhh','?'))[4]  from a limit 1;"

報錯:

Caused by: java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0修改成:
test.sh
#!/bin/bashhive -e "select (split('p?a?b?c?ppp?hhh','\\\\?'))[4]  from a limit 1;"

正確運行原因:

split的第二個參數是一個regex,而‘?’有特殊的意義(? 零次或一次匹配前面的字元或子運算式),因此需要被轉義。在hive中,'\'本身就代錶轉義字元,因此'\'需要被轉義在bash中,'\'本身就代錶轉義字元,因此'\'需要被轉義附錄:Regex需要轉義的特殊字元注釋 $ 匹配輸入字串結尾的位置。如果設定了 RegExp 對象的 Multiline 屬性,那麼 $ 還匹配 \n 或 \r 前面的位置。若要匹配 $ 字元本身,請使用 \$。( ) 標記子運算式的開始和結束。可以捕獲子運算式以供以後使用。若要匹配這兩個字元,請使用 \( 和 \)。* 零次或多次匹配前面的字元或子運算式。若要匹配 * 字元,請使用 \*。+ 一次或多次匹配前面的字元或子運算式。若要匹配 + 字元,請使用 \+。. 匹配除分行符號 \n 之外的任何單個字元。若要匹配 .,請使用 \。 [ ] 標記中括號運算式的開始。若要匹配這些字元,請使用 \[ 和 \]。? 零次或一次匹配前面的字元或子運算式,或指示“非貪心”限定符。若要匹配 ? 字元,請使用 \?。\ 將下一字元標記為特殊字元、文本、反向引用或八進位轉義符。例如,字元 n 匹配字元 n。\n 匹配分行符號。序列 \\ 匹配 \,序列 \( 匹配 (。/ 表示文本Regex的開始或結束。若要匹配 / 字元,請使用 \/。^ 匹配輸入字串開始處的位置,但在中括號運算式中使用的情況除外,在那種情況下它對字元集求反。若要匹配 ^ 字元本身,請使用 \^。{ } 標記限定符運算式的開始。若要匹配這些字元,請使用 \{ 和 \}。| 指出在兩個項之間進行選擇。若要匹配 | ,請使用 \| 
bash逸出字元表\a            ASCII 響鈴字元(也可以鍵入 \007) \d            "Wed Sep 06" 格式的日期 \e            ASCII 逸出字元(也可以鍵入 \033) \h            主機名稱的第一部分(如 "mybox") \H            主機的全稱(如 "mybox.mydomain.com") \j            在此 shell 中通過按 ^Z 掛起的進程數 \l            此 shell 的終端裝置名稱(如 "ttyp4") \n            分行符號 \r            斷行符號符 \s            shell 的名稱(如 "bash") \t            24 小時制時間(如 "23:01:01") \T            12 小時制時間(如 "11:01:01") \@            帶有 am/pm 的 12 小時制時間 \u            使用者名稱 \v            bash 的版本(如 2.04) \V            Bash 版本(包括補丁層級) \w            當前工作目錄(如 "/home/drobbins") \W            當前工作目錄的“基名 (basename)”(如 "drobbins") \!            當前命令在曆史緩衝區中的位置 \#            命令編號(只要您鍵入內容,它就會在每次提示時累加) \$            如果您不是超級使用者 (root),則插入一個 "$";如果您是超級使用者,則顯示一個 "#" \xxx            插入一個用三位元 xxx(用零代替未使用的數字,如 "\007")表示的 ASCII 字元 \\            反斜線 \[            這個序列應該出現在不移動游標的字元序列(如顏色逸出序列)之前。它使 bash 能夠正確計算自動換行。 \]            這個序列應該出現在非列印字元序列之後。reference:http://www.aslibra.com/blog/read.php/1559.htmhttp://hi.baidu.com/yacker/item/52af3ca4c94873d35bf191ea

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.