mybatis中<selectKey>標籤的作用
阿新 • • 發佈:2022-05-11
2.1 正則表示式
在介紹 sed 和 awk 之前,首先需要介紹正則表示式的使用。 正則表示式(regular expression)是描述一種字串匹配的模式,常用來檢查一個字串或檔案中是否含有特定的字串,以便對其進行替換、刪除、插入等操作.很多程式語言都支援正則表示式,如:php、perl、phyton、java 等。在大多數程式語言中, 正則表示式都被括在兩個正斜槓(/)之間,典型的形式是: /pattern/ pattern 是由普通字元(數字、字母等)以及特殊字元(元字元)組成的字串模式。 一,正則表示式基礎 * 表示0個或多個在*字元之前的那個普通字元 如,helo,hello,helllllo都 可以用hel*o來表示. ls -lh [0-9]*[a-z]*... . 表示匹配任意字元 如, ...73. 前三個點為任意字元,最後一個點也是,sas73i,a d747都能匹配上述字串(空格也算). ^ 表示匹配行首 如,^cloud表示匹配cloud開頭的行. 結合*和.使用^...X86* 如876X86666 $ 表示匹配行尾 如,micky$ 該正則表示式匹配micky結尾的所有行. sed -i 's/^basedir=$/basedir=\/usr\/local\/mysql/g' /etc/init.d/mysqld ^$ 匹配所有空行 該正則表示式既匹配行首,又匹配行尾,中間沒有任何字元.因此為空行。 ^.$ 匹配包含一個字元的行 匹配最後一行 awk 'END {print}' sed -n '$p' [] 匹配任意字元 [0123456789]表示匹配任意數字。 [a-z]或[A-Z]表示匹配任意任意字母。 [^b-d]表示取反,表示匹配不在b-d範圍(b,c,d)的所有字元.就是排除這三個字元. [A-Za-z] [A-Za-z]*匹配任意字母 [a-h]*.awk匹配a-h並以.awk結尾的所有檔案 [a-h]*.[^awk]* 匹配a-h開頭的,並排除掉 \ 轉義符號 \ 符號是轉義字元用於遮蔽一個元字元的特殊意義。 \.後面的字元"."是元字元,經過轉義後不再是元字元而是普通的句號 \<\>符號是精確匹配符號, \<the\>精確匹配the這個單詞。而不匹配包含the字元的單詞如,there,them \{\}系列符號(指定匹配出現的個數) \{n\}:匹配前面字元出現n個。 JO\{3\}B#重複字元O 3個,匹配值JOOOB \{n,\}:匹配前面字元至少出現n個 JO\{3,\}B#重複字元O 至少3個,匹配值JOOOB,JOOOOB \{n,m\}#重複字元出現n到m個 JO\{3,6\}B#重複字元出現3到6個。匹配值JOOOB,JOOOOB [a-z]\{5\}#精確匹配5個小寫字母. 二,正則表示式擴充套件 ? 符號 匹配"?"符號之前的那個字元0次或1次。 JO?B + 符號 匹配"+"符號之前的那個字元1次或任意次。 S+EU,SSEU、SSSSSEU ()符號和|符號 ()被[] | 也表示或的意思 ()通常與|符號結合使用,表示一組可選字元的集合 re(a|e|o)d 表示在字元a,e,o中選擇任意一個字元,read,reed,reod re(a|e|o)d等價於re[aeo]d SHELL本身不支援正則表示式,使用正則表示式的是SHELL命令和工具 grep sed awk等. 萬用字元 ls -lh [a-h]*.awk ls -lh 0?.pem ls -lh [a-h]*.[^awk]* 萬用字元中花括號表示一組表示式的集合 ls -l {[a-h]*.awk,0?.pem} ,逗號表示或的意思 sed命令基本用法文字處理器.(行處理器) sed是一個非互動式文字編輯器,它可對檔案和標準輸入進行編輯,標準輸入可以來自鍵盤,檔案重定向,字串,變數,甚至來自於管道的文字. sed從文字的一個文字行或標準輸入中讀取資料,將其複製到緩衝區,然後讀取命令列或指令碼的第一個命令,對些命令的行號進行編輯,重複此過程直到命令列或指令碼中的所有行命令都執行完畢. sed命令用於以下三種場合 1,編輯村對互動式文字編輯而言太大的檔案。 2,編輯命令太複雜,在互動式文字編輯器中難以輸入的情況 3,對檔案掃描一遍,但是需要執行多個編輯函式的情況。 sed只是對緩衝副本進行編輯,並不編輯原始檔案. 要儲存改動內容,需要交將輸出重定向到別一個檔案,如下命令 sed 'sed命令' input-file > result-file 呼叫sed三種方式 1,在shell命令列輸入命令呼叫sed,格式為 sed [選項] 'sed命令' 輸入檔案 注意,需要用單引號將sed命令引起來 2,將sed命令插入指令碼檔案後,然後通過sed命令呼叫它, sed [選項] -f sed 指令碼檔案 輸入檔案 3,將sed命令插入指令碼檔案後,最常用的方法是設定該指令碼檔案可執行, 然後直接執行該指令碼檔案。 ./sed 指令碼檔案 輸入檔案 sed命令選項 -n 不列印所有行到標準輸出 -e 表示將下一個字串解析為sed編輯命令,如果只傳遞一個編輯命令給sed,-e選項省略。 -f 表示正在呼叫sed指令碼檔案 sed通常有定位文字行和sed編輯命令兩部分組成。sed編輯命令對定位文字行進行各種處理。 sed 提供兩種方式定位文字 1,使用行號,指定一行,或指定行號範圍。 2,使用正則是表示式 sed 定位文字選項 x 為指定行號 x,y 指定從x到y的行號範圍 /pattern/ 查詢包含模式的行 /pattern/pattern/ 查詢包含兩個模式的行 /pattern/,x 從與pattern的匹配到x號行之間的行 x,/pattern/ 從x號行到與pattern的匹配行之間的行 x,y! 查詢不包括x到y行號的行 sed編輯命令選項 對文字處理如列印,刪除,追加,插入,替換等 p 列印匹配行 = 列印檔案行號 a\ 在定位行號之後追加文字資訊 i\ 在定位行號之前插入文字資訊 d 刪除定位行 c\ 用新文字替換定位文字行 s 使用替換模式替換相應模式 r 從另一個檔案中讀文字 w 將文字寫入到一個檔案 y 變換字元 q 第一個模式匹配完成後退出 l 顯示與8進位制ASCII碼等價的控制字元 {} 在定位行執行的命令組 n 讀取下一個輸入行,用一個命令處理新的行 h 將模式緩衝區的文字複製到保持緩衝區 H 將模式緩衝區的文字複製到保持緩衝區 x 互換模式緩衝區和保持緩衝區的內容 g 將保持緩衝區的內容複製到模式緩衝區 G 將保持緩衝區的內容追加到模式緩衝區 i 在原檔案上修改 sed命令選項的一組例子 sed -n 選項 不列印所有行,不加-n列印所有行. sed '1p' input 列印第一行 sed -n '1p' input 列印範圍行3,6行 sed -n '3,6p' input 列印匹配關鍵字的行(對大小敏感) sed -n '/certificate/p' input sed -e選項 有多個sed編輯命令才有用武之地 sed -n -e '/Certificate/p' -e '/Certificate/=' input 注意,不支援同時帶多個編輯命令的用法如: sed [選項] -e 編輯命令1 -e 編輯命令2 ... -e 編輯命令n 輸入檔案 sed -f 選項 -f選項只有呼叫sed指令碼檔案時才起作用,追加文字,插入文字,刪除文字和替換文字等功能需要幾條sed命令來完成,所以將這些命令寫入sed指令碼,然後呼叫sed指令碼來完成. sed '指定地址a\text' 輸入檔案 sed '/file:/a\We a append a new line.' input #vim append.sed #!/bin/sed -f /file:/a\ We a append line.\ We a append line. #chmod u+x append #./append.sed input sed 文字定位的一組例子 匹配元字元 sed -n '/\./p' input sed -n '/\$/p' input 使用元字元進行匹配 匹配最後一行 sed -n '$p' input 包含點bus結尾的行 sed -n '/.*bus/p' input sed -n '1p' /etc/issue | awk '{pirnt $1,$3}' !符號(不能用於關鍵字匹配如/pattern/) 匹配不在範圍內的行 sed -n '2,10!p' input 使用行號與關鍵字匹配限定行範圍 sed -n '/seugrid/,$p' input sed基本編輯命令的一組例子 插入文字行前 'i\ 和a\行尾' 插入文字並換行. sed '指定地址 i\text' 輸入檔案 sed '/file/i\file' files.txt ##指定行前插入文字並換行 sed '/file/a\file' files.txt ##指定行尾插入文字並換行 在文字的行首或行尾不換行插入字元. sed 's/^/HEAD/g' files sed 's/$/TAIL/g' files 在指定文字的行首或行尾不換行插入字元. sed '/xx$/s//&,要插入的字元/g' files sed 設定變數$Server_ip,需要使用雙引號. "/allowed_hosts=127.0.0.1$/s//&,$Server_ip/g" files 修改文字(整行都修改) 'c' sed -i '/file/c\peng' files 2,5行替換成 No 2-5 number sed -i '2,5c No 2-5 number' files 刪除文字 'd'(整行) sed '1d' input sed '$d' input sed '1,10d' input 刪除匹配的行 sed '/world/d' filename 刪除某行 sed '4,8d' thegeekstuff.txt 從第三行開始,每隔一行刪除 sed 3~2d thegeekstuff.txt 刪除最後一行 sed '$d' thegeekstuff.txt 刪除與關鍵字匹配的行(不區分大小寫) sed '/[Cc][Ee][Rr][Tt][Ii][Ff][Ii][Cc][Aa][Tt][Ee]/d' file.txt 刪除不在範圍內的行 sed '2,10!d' file 刪除空行 #ls | paste -d " " -s - - - - - | sed 's/ /\n/g' | sed '/^$/d' | wc -l sed '/^$/d' thegeekstuff.txt 刪除連續重複的行 sed '$!N; /^\(.*\)\n\1$/!P; D' file.txt > new_file 替換文字 'g' g 表示替換文字中所有出現被替換字串之處 p 與-n選項結合,只打印替換行 w檔名 表示將輸出定向到一個檔案 格式如下 sed -n 's/被替換的字串/新字串/p' 輸入檔案 sed -n 's/Certificate/CERTIFICATE/p' input sed -n 's/Certificate/CERTIFICATE/' input 不加p不列印匹配到的內容 過濾掉名號,逗號,冒號,空格轉換換行,對每行第一個單詞排序,輸出重複出現的次數,按照頻率從大到小排序. sed 's/\.//g' -e 's/\,//g' -e '/\://g' -e 's/ /\n/g' "$1" | sort | uniq -c | sort -nr 替換整行 sed -i 's#^.*BASEDIR=\/usr\/local.*#BASEDIR=\/usr\/local\/services\/zabbix\/#g' /etc/init.d/zabbix_agentd 只替換第一處的匹配到關鍵字 sed 's/seu/njeu/p' input 替換多處匹配到關鍵字g選項才發揮作用 sed -n 's/seu/njeu/pg' input sed在這個文裡Root的一行,匹配Root一行,將no替換成yes sed -i '/Root/s/no/yes/' /etc/ssh/sshd_config 指定替換第幾處的關鍵字 sed -n 's/seu/njeu/2p' input sed替換多個字串 sed -i 's/7778/80/g;s/7779/443/g' /etc/apache2/ports.conf w選項將輸出重定向到這個檔案 sed -n 's/seu/njeu/pw ouput' input &符號可用來儲存被替換的字串以供呼叫 sed -n 's/seu/(&)/pg' input 寫入一個新檔案 'w' 1到5行寫入新的檔案 sed -n '1,5 w output' input 將globus關鍵字寫入新的檔案 sed -n '/globus/w output' input 從檔案中讀入文字 'r' 在匹配行的行後讀入otherfile檔案 sed '/Certificate/r otherfile' input 退出命令 'q' 匹配到第一個就退出 sed '/.r.*/p' input sed擷取字元 提取 str="abcdefg" echo "$str" | sed -r 's/.*c(.*)f.*/\1/' ##1表示提取括號中的字元 grep '127.0.0.1' a.txt |sed -r 's/.*tb_tow(.*)\?.*/\1/' 變換命令 'y' 對文字逐個字元變換,變換字元長度要一樣. sed 'y/fmj/FMJ/' imput sed顯示控制字元 字母'l' sed -l 顯示檔案中的控制字元 sed -n '1,$l' control 在定位行執行命令組(類似於-e) sed -n -e '/Certificate/p' -e '/Certificate/=' input 等價於 sed -n '/Certificate/{p;=}' input i替換成I,le替換成99. sed '/Certificate/{s/i/I/pg;s/le/99/;}' input sed中使用變數(雙引號) sed -in-place "s/8080/$port/g" /home/work/server.xml