shell--grep命令+正則表達式+基本語法
什麽是正則
正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。
在linux中,通配符是由shell解釋的,而正則表達式則是由命令解釋的,可以解釋正則的有三種文本處理工具/命令:grep、sed、awk,今天我們先來熟悉grep。
Python也用到正則表達式,與此正則稍有區別,此處講正則,可以加深我們的理解。
---------------------------------------------------------------------------------
grep
參數
-n :顯示行號
-o :只顯示匹配的內容
-q :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容
-l :如果匹配成功,則只將文件名打印出來,失敗則不打印,通常-rl一起用,grep -rl ‘root‘ /etc
-A :如果匹配成功,則將匹配行及其後n行一起打印出來
-B :如果匹配成功,則將匹配行及其前n行一起打印出來
-C :如果匹配成功,則將匹配行及其前後n行一起打印出來
--color
-c :如果匹配成功,則將匹配到的行數打印出來
-E :等於egrep,擴展
-i :忽略大小寫
-v :取反,不匹配
-w:匹配單詞
下面我們可以做些練習:
-------------------------
正則介紹
^ 行首
$ 行尾
. 除了換行符以外的任意單個字符
* 前導字符的零個或多個
.* 所有字符
[] 字符組內的任一字符
[^] 對字符組內的每個字符取反(不匹配字符組內的每個字符)
^[^] 非字符組內的字符開頭的行
[a-z] 小寫字母
[A-Z] 大寫字母
[a-Z] 小寫和大寫字母
[0-9] 數字
\< 單詞頭 單詞一般以空格或特殊字符做分隔,連續的字符串被當做單詞
\> 單詞尾
? 前導字符零個或一個
+ 前導字符一個或多個
x{m} x出現m次
x{m,} x出現m次至多次(至少m次)
x{m,n} x出現m次至n次
abc|def 表示abc或def
a(bc|de)f 表示abcf 或 adef
擴展正則:grep -E 或 egrep
下面是一些練習:
------------------------------------------------------------
基本語法
什麽是shell script
將OS命令堆積到可執行的文件裏,由上至下的順序執行文本裏的OS命令 就是腳本了.
再加上些智能(條件/流控)控制,就變成了智能化腳本了.
變量
part1 為何要有變量
程序的運行就是一些列狀態的變量->用變量值的變化去表示
part2 變量命名規則
以字母或下劃線開頭,剩下的部分可以是:字母、數字、下劃線.
最好遵循下述規範:
1.以字母開頭
2.使用中劃線或者下劃線做單詞的連接
3.同類型的用數字區分
4.對於文件最好加上拓展名
例如: sql_bak.tar.gz,log_bak.tar.bz2
part3 系統變量
set 和 env區別
set:顯示所有變量
env:環境變量
part4 變量賦值
VARNAME=VALUE
echo $VARNAME
刪除變量 unset VARNAME
part5 常用系統變量
PATH
PWD
LANG
HOME
HISTSIZE
PS1
IFS
域分隔符 是空格,換行,TAB鍵的合集
part6 全局變量與局部變量
[[email protected] ~]# gender=‘male‘ #在爹這個位置定義一個局部變量gender
[[email protected] ~]# export money=1000 #在爹這個位置定義一個全局變量money
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]# bash #切換到子bash
[[email protected] ~]# echo $gender #在兒子這裏看它爹的局部變量gender,結果為空->看不到
[[email protected] ~]# echo $money #在兒子這裏看它爹的全局變量money,可以看到
1000
[[email protected] ~]#
[[email protected] ~]# export hobby=‘piao‘ #在兒子這裏定義一個全局變量hobby
[[email protected] ~]# exit #退出,進入爹的bash環境
exit
[[email protected] ~]# echo $hobby #爹是看不到兒子的export的,兒子的兒子可以看到
[[email protected] ~]#
part6 定義變量名的邊界
[[email protected] ~]# rest_mem=20
[[email protected] ~]# echo ${rest_mem}%
20%
part 7 數據類型
bash中的變量無須聲明,拿來就用.默認的變量都會是字符類型,還可以有數字類型,普通的腳本,這兩種類型夠用了
運算符
part1 算術運算符
+
-
*
/
%
part2 關系操作
與(())連用
<
>
<=
>=
==
!=
&&
||
test命令相關,[]可以達到一樣的效果
[[email protected] ~]# x=1
[[email protected] ~]# [ $x -gt 1 ]
[[email protected] ~]# echo $?
0
shell--grep命令+正則表達式+基本語法