1. 程式人生 > 其它 >mybatis中<selectKey>標籤的作用

mybatis中<selectKey>標籤的作用

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