1. 程式人生 > >shell--grep命令+正則表達式+基本語法

shell--grep命令+正則表達式+基本語法

及其 gre awk 使用 part 開頭 合集 運算符 擴展

什麽是正則

正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。

在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命令+正則表達式+基本語法