#----------------------------------------------------------#html
# ====>
紅色字體 -特指煮酒我的所見。加粗則爲須要重點注意。 #
# ====>
藍色加粗 -特指與本文相關人員,包括參與修正的朋友。 #
# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com
#
#----------------------------------------------------------#
煮酒品茶:學習之中有樂趣固然也有苦悶,特別是剛看正則的時候一下就被轉昏頭了,不過還好,堅持下來了,正則看起來把複雜問題簡單化,其實就能夠解決問題了,sed也是,看了一天,筆記記了大概20來頁,固然不可能全寫上來。只能在筆記上找重點。下面開始吧。python
述:正則表達式能夠提供更強大的標記法,以單個表達式匹配各類實際的文本數。
grep家族的武器強度。
----------------------------
grep:文本匹配程序
egrep:使用擴展正則表達式,消耗更多的運算資源
fgrep:快速grep,匹配固定字符串而非正則表達式。
-----------------------------
who |grep -F root
注:-F是grep默認的選項,列出單前root登錄的信息,過程就是把who打印出來的信息交給grep,grep查找root的行。而後再打印出來。
grep 選項 文件
用途:顯示一個或多個模式的文本行,一般用於管道|的第一步。具體參數請查找相關資料。
煮酒品茶:這個就不用多說了吧,用途大大的,各類查找,與sed awk cut組成強大的陳營。一塊兒學下去確定會獲得更多。下一步找個Shell分析一下。
正則表達式:是一種表達方式,讓你能夠查找匹配的特定準則的文本,例如表達以"a字母開頭「匹配多個字符。
煮酒品茶:說白了,就是以特定的語言來規定內在的命令,就好像你在北京用家鄉話和老鄉溝通同樣,別人聽不懂的。聽的懂的人就能夠執行相關的命令了。可是搞IT的都喜歡弄些專業的名詞來更好的表述本身的觀點。
正則是由兩個基本組成部分創建,通常字符和特殊字符,通常就是沒有意義的字符,特殊就是有特別意義的字符就好像你的家鄉話同樣,又稱
元字符。
正則支持的命令有:
查找相關:grep egrep agrep
編輯器:sed
字符串處理程序:awk icon perl python ruby tcl
文件查看程序:more page pg less
文件編輯程序:vi emacs jed jove vile vim等
編寫正則表達式的三個步驟:
一、知道要匹配的內容以及它如何出如今文本中。
二、編寫一個模式來描述要匹配的內容。
三、測試模式來查看它的匹配內容
正則表達式產生的後果:
Hit命中
Misses非命中
omissions遺漏
false alarms假命中
煮酒品茶:粗俗的來說就是你首先要須要你的需求以及怎麼設計需求,最後預覽一下看是否是和你的須要的同樣。而產生的後果也就只有這麼幾種。能夠根據錯誤往上查。
元字節查看圖
------------------------------------------------

-------------------------------------------
煮酒品茶:看了表以後餘下的就是多練習了,查看時必須先根據前優先級而後再查看,否則真的看暈你。大框架裏包小框架,等下sed裏會有,我多寫一點實例。
優先級: 高至低
[....] [: :] 方括號符號
[ ] 方括號表達式
\( \) \digit 子表達式或反向應用
* \ & \ } 前置單個字符發現的正則表達式
無符號 連續
^$ 錨點
煮酒品茶:你能夠看不懂正則,但必定要記住優先級,否則你查表都無法查。
流編輯器Sed
解釋:shell中處理通常文件替換支持正則表達式與替換文本,任何可顯示的字符均可以做爲定界符,一般以標點符號做爲分界符
如 sed 's/a/b/' file 做用是把file文件中的第一個a替換成b 那麼上方的定界符解釋是什麼意思呢?
看這個你就明白了,sed's/a/b/' file 等同於 sed'#s#a#b' file 定界符就是這個意思,這裏得感謝
dn833的指導,在sed中'與"均可以使用,意思就是說sed"s/a/b/' file也可使用。
使用方法:
[address] command
替換:[address] s/pattern/replacement/flags
標記flages有:
-n 能夠是1-512,表示第n次出現的替換狀況
g 全局更改,就是所有替換的意思 sed 's/a/b/g' file 後面那個g也就是flages所有替換。
p 打印模式之間的內容
w file 寫入到一個文件file中
下面有不少的實例:
------------------------------------------------
查看文件
[root@localhost sed]# cat file
a a a a a
a
b b b b bb
b
c c c c c
c
ddd dd d d d
d
替換第一個'無空格a'爲b
[root@localhost sed]# sed 's/a/b/' file
b a a a a
b
b b b b bb
b
c c c c c
c
ddd dd d d d
d
替換所有的a爲b g表示所有替換
[root@localhost sed]# sed 's/a/b/g' file
b b b b b
b
b b b b bb
b
c c c c c
c
ddd dd d d d
d
替換第一個'空格a'和'空格c',其中;是分隔符
[root@localhost sed]# sed 's/ a/, b/ ; s/ c/,d/' file
a, b a a a
a
b b b b bb
b
c,d c c c
c
ddd dd d d d
d
--------------------------------------------
替換' " [ ] \ / .等符號
替換'有點不一樣
-------------------------------------------
[root@localhost sed]# sed 's/'\''/b/g' file
a a a a a
a
b b b b bb
b
c c c c c
c
ddd dd d d d
d
a
a
aa a
a
b " " " "
" ""
\\\\//[]
b bb bb b b
[root@localhost sed]#
替換其它的[ ]< >等
[root@localhost sed]# sed 's/\[/b/g' file
a a a a a
a
b b b b bb
b
c c c c c
c
ddd dd d d d
d
a
a
aa a
a
' " " " "
" ""
\\\\//b]
' '' '' ' '
[root@localhost ~]#
正則一例:
[root@localhost sed]# cat z
a:b
c:d
e:f
[root@localhost sed]# sed 's/\(.*\):\(.*\)/\2:\1/' z
b:a
d:c
f:e
煮酒品茶:如何來看這個正則呢? sed 's/\(.*\):\(.*\)/\2:\1/' z
首先看大框框sed's/?a/?b/' 能夠分爲兩部分了,?a=\(.*\):\(.*\) ?b=\2:\1 這樣是否是就能夠看清了?解釋?a,
\)就是相關的意思,正的變負的負的變正的,因此這裏要這麼理解\(,把通常字符(換成特殊字符,才能組成正則嘛,後面都同樣, .* 看錶後會發現.是任意一個字符,*是任意多個前面的字符,.*就是任意多個字符,如今看?b \2:\1
前面說了\正的搞成反的,在sed裏2和1都是通常字符,這裏反過來就是特殊字符也就是第一段和第二段,第二段是?a的後面那個.* \1是前面那個.* 因此是否是正好反過來了。看正則先看大框架再看優先級。看的多了就知道看了。
冊除空行和帶#號的這一行,我本身寫的,用sed -e也能夠。
[root@localhost sed]# sed '/^$/D' /etc/vsftpd/vsftpd.conf |sed '/\#.*/D'
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
煮酒品茶:sed '/^$/D' /etc/vsftpd/vsftpd.conf |sed '/\#.*/D' 再拆唄,sed '//D是冊除的寫法,具體可看sed表。^$ ^是以這個爲開頭,$以這個爲結尾,開頭結尾那就是空行咯,因此空行全冊掉。 後面那個\#.* #無論在sed裏仍是正則裏都沒任何用,因此#.*也能夠,咱們能夠更好的寫^#.*來實現。這個要配置文件中至關重要,別人要看你的配置文件,你給他成百上千的行給別人看?
sed -e方式
[root@localhost sed]# sed -e '/^$/D' -e '/\#.*/D' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
把單個數據替換成單個字母,這個可不是全局匹配哇。1和a 2b 3c等進行替換。
[root@localhost sed]# cat number
123456
123654
[root@localhost sed]# sed 'y/123456/abcdef/' number
abcdef
abcfed
冊除::d命令
sed '2d' file 冊除file第二行
sed '2,$d' file 冊除2到最後那行
sed '$d' file 冊除最後一行
sed '/test/'d file 冊除file中包含test的行。
sed '/a/b/'d file 冊除a到b中間的行。
更多能夠看:http://www.linuxde.net/2011/12/3381.html萬變不離其宗,你掌握了規則,他再變也就是變下實例,其實吖根本就沒變。
----------------------------------------------
CUT
解釋:用來剪下文本文件中的數據,能夠是字段類型和字符類型,一個製表字符爲單個字符。
用法:cut -c list [file...]
cut -f list [-d delim] [file...]
-c 以字符爲主
-d 定界符
-f 以字符爲主
實例:
cut -d: -f 1,5 /etc/passwd 剪掉以:號爲定界符的第1個和第5個而後打印出來,
/etc/passwd文件內容太多了,直接看這個吧。
---------------------------------------
[root@localhost sed]# echo 1:2:a:e:l:6|cut -d: -f 1,4
1:e
root@localhost sed]#
------------------------------------------------------
JOin
解釋:能夠將多個文件結合在一塊兒,每一個文件裏的每條記錄都共享一個健值,健值指的是主字段。
語法:join [options...] file1 file2
轉換過程以下:
----------------------------
[root@localhost sed]# cat 1
a 1
b 2
c 4
d 4
[root@localhost sed]# cat 2
a 2
b 4
c 8
d 9
[root@localhost sed]# join 1 2
a 1 2
b 2 4
c 4 8
d 4 9
[root@localhost sed]#
----------------------------------
煮酒品茶:這個合併數據用不錯。積累命令吧,積累多了你就是個寶庫了。
Awk
解釋:讀取命令上所指定的各個文件(若無,則標準輸入),一次讀取一條記錄(行)再針對每一行應用程序所指定的命令。
...|awk '{print some-stuff}'|...
煮酒品茶:sed和awk是個大話題不可能一下講過,因此原書上只講了一部分,在後面有單獨講這個的。
awk '{print $1}' 打印第一個程序
awk '{print $1,$5}' 打印2-5個字段
awk '{print $1,$NFS}' 打印1到最後 這個打印出來沒回車
awk 'NF>0 {print $0}' 打印1到最後 這個打印可來有回車
awk -F: '{print $1,$5}' 以:爲定界符打印第一個字段和第五個字段。是否是和cut同樣,咱們試下吧。
-----------------------------
[root@localhost sed]# echo "a:b:c:d:e:f" |awk -F: '{print $1,$4}'
a d
[root@localhost sed]# echo "a:b:c:d:e:f" |cut -d: -f 1,4
a:d
---------------------------------
煮酒品茶:基本沒區別,可是中間有個:號,下面也會講到的。
awk -F: -v'OFS=**' 'print $1,$4' file 這個是以**爲來作分隔符啦,咱們再試下。
---------------------------
[root@localhost sed]# echo "a:b:c:d:e:f" |awk -F: -v 'OFS=:' '{print $1,$4}'
a:d
[root@localhost sed]#
--------------------------------------
煮酒品茶:注意OFS=:'後面要加個空格,和'{分開。
總結一下:筆記內容有,
sed 正則 awk cut join 慢慢消化,多看實例,下回找個Shell來分析下。