編程語言和shell編程的基礎內容以及grep、egrep命令及相應的正則表達式和用法
bash的特性之多命令執行的邏輯關系:
1.命令替換(命令之間無明確的邏輯依賴關系)
COMMAND1 $(COMMAND2)
2.管道(命令之間無明確的邏輯依賴關系)
COMMAND1 | COMMAND2 | COMMAND3
前面的命令無論執行成功與失敗後面命令繼續執行;管道命令的前一個命令應該有標準和輸出否則用“;”隔開
例如:useradd sola ;echo 456 | passwd --stdin sola
3.順序執行結構
COMMAND1;COMMAND2;COMMAND3 …
4.選擇執行結果
如果……那麽……
要麽……要麽……
邏輯運算:
與:邏輯乘法,1--真,0--假,&&(bash中的and符號),雙目操作符
1&&1=1 1&&0=0 0&&0=0 0&&1=0
“與”運算的短路運算法則:只要第一個操作數為false,則其邏輯運算結果一定為false
或:邏輯加法,1--真,0--假,||,雙目操作符
1||1=1 1||0=1 0||1=1 0||0=0
“或”運算的短路法則:只要第一個數為ture,則其邏輯運算結果一定為ture
“非”:邏輯取反,1--真,0--假,!,單目操作
!0=1 !1=0
命令執行的狀態返回值:
SUCCESS:0--TURE
FAILURE:1-255--FALSE
COMMAND1 && COMMAND2
表示:
1.如果COMMAND1能夠成功執行,那麽將會執行COMMAND2;
2.如果COMMAND1執行失敗,那麽COMMAND2將不會執行;
COMMAND1 || COMMAND2
表示:
1.只有COMMADN1執行失敗,COMMAND2才會被執行;
2.如果COMMAND1執行成功,COMMAND2將不會被執行;
!COMMAND1 && COMMAND2 相當於 COMMAND1 || COMMAND2
!COMMAND1 || COMMAND2 相當於 COMMAND1 && COMMAND2
德·摩根定律
!(COMMAND1 && COMMAND2) || COMMAND3
!(COMMAND1 || COMMAND2) && COMMAND3
!(A && B) =!A || !B
!(A || B) =!A && !B
三種邏輯運算的優先級:
! > && > ||
示例:
如果用戶user4存在並且其家目錄也存在,那麽就執行userdel -r user4命令;
id user4 && ls -d /home/user4 && userdel -r user4
bash腳本編程:
什麽叫編程?
使用人類自然語言或機器語言進行程序源代碼書寫的過程。
為什麽要編程?
為了能夠讓用戶在使用計算機的時候,可以讓計算機以非交互的方式完成某些任務;此時,用戶需要將此類任務編輯成為一個文件,並且讓計算機按照特定書序進行任務讀取,從而實現預期的功能;
為了讓計算機能夠解讀此類文件的內容並正確的予以執行,必須將程序源代碼文件轉換為計算機可以直接識別並使用的二進制格式,此轉換過程稱為編譯;而想要完成編譯過程,必須使用特定的編譯器工具;因此無論實用和重編程語言進行程序編寫必須嚴格按照編譯器能夠識別的特定格式和語法結構進行程序編寫;
編程語言:
高級語言:
根據源代碼的處理方式:
編譯型語言:
源代碼 -->編譯器(編譯) -->[鏈接器(鏈接) -->]匯編器(匯編) -->可以執行的二進制代碼文件;
解釋型語言:
源代碼 -->解釋器(逐行解釋) -->邊解釋邊執行
根據編程過程中的功能實現是庫調用 還是調用外部程序文件分類:
完整編程語言:
利用庫或編程組件進行編程
腳本編程語言:
利用解釋器調用被選擇的外部應用程序
根據程序的編寫規範分類:
過程式語言:
程序=指令+數據
以指令為中心,圍繞指令的功能實現設計數據和數據結構,數據為指令服務;
算法和指令的實現形式:
順序執行
選擇執行
循環執行
面向對象語言:
程序=算法+數據結構
以數據和數據結構為中心,將數據實例化,圍繞數據的需求來部署算法;
類(Class):被實例化的數據
屬性(attbition):同一類的不同對象的區分依據
方法(method):類的正確的操作方法;
低級語言:
匯編語言:
機器語言:二進制語言
shell腳本編程——bash腳本編程:
過程式編程語言,解釋運行的編程語言,腳本類語言(靠外部應用程序文件運行)
shell腳本到底是什麽?
1.純文本文檔——文件中所有存儲或包含的指令+數據都是以字符為單位存儲的;
2.根據用戶的需求來解決用戶問題的簡單或復雜的命令組合體;
3.是一種具有“執行冪等性”的程序實體;
執行冪等性:任何命令的一次執行結果和多次執行結果是一致的;
註意:
很多的命令都不具備執行冪等性,因此在shell腳本中需要使用大量的程序邏輯來判斷某個命令是否符合其運行條件,從而避免在運行過程中出現的嚴重錯誤;
shell腳本中的代碼內容是如何書寫?
1.首行必須是shebang,即解釋器程序的絕對路徑,必須占據絕對行首且必須單獨占據第一行;在執行腳本時,會根據shebang的指示,啟動相應的解釋器以解釋腳本中諸多的命令:
#!/bin/bash
#!bin/sh
#!/usr/bin/python
#!/usr/bin/per1
……
2.在shell腳本中,除了shebang之外,所有行首為#字符的行,均被解釋為註釋行;
即:解釋器只會解釋其內容,但並不予以執行;
3.解釋器會忽略腳本文件中所有的空白行,空白行指的是:在一行文本中,除了空白字符,空格字符,制表字符之外不具備其他任何類型字符的行:
4.大量的命令和關鍵字
命令:內部或外部應用程序
關鍵字:內置於shell,只能在某種特定結構體中執行的命令:keyword;
如:if,else,then,do,while,for,select,until,case,fi,
5.shell中的所有的特殊功能字符;
註意:所有被編寫進shell腳本文檔的命令、關鍵字及符號必須是ASCII編碼格式的字符,其他編碼格式的字符可以出現在shell腳本文件中,但不具備特殊含義;
如何編寫shell腳本?
可以利用所有的文本文檔編輯工具進行shell腳本編寫,如:
nano,vi,vim,pico,emacs,……
通常在Linux的各發行版本中,推薦使用vim;
腳本文件的命名方式:
一般情況下,會為腳本設置“.sh”的名稱後綴,較低版本的編輯工具,會根據文件的後綴名稱來識別是否為shell腳本文件,較高版本的文本編輯工具,如bim7,無需過多的關心文件後綴名的問題。
腳本的運行方式:
1.為腳本文件賦予執行權限,可以直接以絕對路徑或相對路徑的方式運行此文件:
# chmod +x /PATH/TO/SOME_SCRIPT_FILE
# /PATH/TO/SOME_SCRIPT_FILE
註意:如果腳本文件所在目錄路徑存儲於PATH變量中,則直接以腳本文件名來執行即可;
2.直接使用解釋器來運行腳本,將腳本文件作為解釋其程序的參數;
# bash /PATH/TO/SOME_SCRIPT_FILE
bash命令的常用選項:
-x:使bash在解釋腳本的過程展示在標準輸出上;一般用於為shell腳本排錯;
-n:對腳本文件進行預執行,以分析腳本中是否存在語法錯誤,如果沒有錯誤則不會輸出任何信息;相反,則輸出一些簡潔的提示信息;具體的錯誤定位還需要我們自己定位判斷;
註意:此種方式中,腳本文件是否有執行權限並不是很重要的屬性;
特別註意:以上兩種方式,在執行腳本時,會在當前shell中開啟一個新的子shell以運行腳本;一般情況下,當腳本運行結束,該子shell也會被隨之銷毀;因此,所有在腳本中定義的變量,在腳本的末尾處,最好將其明確的撤銷,否則會影響當前shell環境;
3.使用source命令來運行腳本:
# source /PATH/TO/SOME_SCRIPT_FILE
# . /PATH/TO/SOME_SCRIPT_FILE
註意:
1.source命令不會在運行腳本時開啟子shell,而是在當前shell中運行;
2.使用source命令執行的腳本中不要包括諸如exit類的命令
練習:寫一個腳本
當alex用戶不存在時,創建之;如果成功創建,則顯示成功創建的提示信息,否則顯示用戶已存在。
[root@localhost ~]# vim user.sh
#!/bin/bash
#
! id alex && useradd alex && echo "Create user alex finished." || echo "User alex exists already."
[root@localhost ~]# bash user.sh
uid=1001(alex) gid=1001(alex) 組=1001(alex)
User alex exists already.
[root@localhost ~]# userdel alex
[root@localhost ~]# bash user.sh
id: alex: no such user
useradd:警告:此主目錄已經存在。
不從 skel 目錄裏向其中復制任何文件。
正在創建信箱文件: 文件已存在
Create user alex finished.
利用bash腳本程序實現算術運算:
算術運算操作符:
常用的基本算術符:
+.-.*./.%.**
增強型的算術運算符:
+=,-=,*=,/=,%=
特殊的增強型算術運算符:
++,--
算術運算方法:
1.$[expression]
其中的表達式可以是純數字組成的,也可以使用變量引用變量值;在使用變量時,可以將$符號省略;
示例:
# echo $[3+4]
# NUM1=5 ;NUM2=4; echo $[NUM1*MUM2]
2.let VAR=EXPRESSION
根據算數表達式完成算術運算並賦值給指定的變量
3.$((EXPRESSION))
其中的表達式可以是純數字組成的,也可以使用變量引用變量值;在使用變量時,可以將$符號省略;
4.expr ARGUEMENT1 ARGUEMENT2 ARGUEMENT3
其中ARGU1和ARGU3必須是整數數值;ARGU2是算數運算符
5.echo "EXPRESSION" | bc
6.bc <<< "scale=3;35/9" 輸出3.88
[root@localhost ~]# bc <<< "scale=3;35/9"
3.888
應用:
[root@localhost ~]# ls /etc | wc -l
276
[root@localhost ~]# ls /var | wc -l
22
[root@localhost ~]# echo $[$(ls /etc | wc -l)+$(ls /var | wc -l)]
298
文本處理工具:
全屏編輯器:vim nano
行編輯器:
文本處理三劍客:grep系,sed,awk
grep系:grep,egrep,fgrep,文本搜索工具;基於PATTERN(模式)對於給定的文本文件進行模糊搜索,grep系所有命令默認工作於貪婪搜索模式(盡可能多的匹配);
sed:Stream EDitor,流編輯器,文本編輯工具
awk:文本格式化工具,文件報告生成器,文件處理的編程語言;
grep系:
grep:Global search Regular Expression and Print out the line,
利用正則表達式進行全局搜索並將匹配的行顯示出來;
格式:grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
PATTERN:過濾匹配條件,是有沒有特殊意義的文本字符或者是正則表達式元字符組成;
正則表達式的元字符:會被正則表達式處理引擎解釋為特殊含義的字符;
pcre:正則表達式處理引擎,prel語言的正則表達式引擎;
[root@localhost ~]# alias
alias cp=‘cp -i‘
alias egrep=‘egrep --color=auto‘
alias fgrep=‘fgrep --color=auto‘
alias grep=‘grep --color=auto‘
alias l.=‘ls -d .* --color=auto‘
alias ll=‘ls -l --color=auto‘
alias ls=‘ls --color=auto‘
alias mv=‘mv -i‘
alias rm=‘rm -i‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
因此在執行grep和egrep時會有顏色標記
正則表達式的元字符:
基本的正則表達式元字符:BRE
[root@localhost ~]# touch liuneng
[root@localhost ~]# vim liuneng
[root@localhost ~]# cat liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
ABCD
22345
354435hhahfhg
字符匹配類:
.:匹配任意的單個字符;
[root@localhost ~]# grep ".p" liuneng
If you give me 8 apples, i will have 15 apples.
[]:匹配任意指定範圍內的單個字符;
[root@localhost ~]# grep "[ ]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
[^]:匹配任意指定範圍以外的單個字符;
[root@localhost ~]# grep "[^T]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
ABCD
22345
354435hhahfhg
下列的所有字符集都可以放置於[]內用於匹配字符集範圍內的單個字符:
[:lower:]:所有的小寫字母
[root@localhost ~]# grep "[[:lower:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
354435hhahfhg
[:upper:]:所有的大寫字母;
[root@localhost ~]# grep "[[:upper:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
ABCD
[:digit:]:所有單個的十進制數字;
[root@localhost ~]# grep "[[:digit:]]" liuneng
If you give me 8 apples, i will have 15 apples.
22345
354435hhahfhg
[:alnum:]:所有的字母和十進制數字;
[root@localhost ~]# grep "[[:alnum:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
ABCD
22345
354435hhahfhg
[:punct:]:所有的符號;
[root@localhost ~]# grep "[[:punct:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
[:space:]:表示空白字符,包括空格和制表符;
[root@localhost ~]# grep "[[:space:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
[:xdigit:] :所有16進制的數字;
下面這三個要嚴格與 Globbing——文件名通配符中的bash內建字符集區分開
[a-z]:僅表示所有的小寫字母
[root@localhost ~]# grep "[a-z]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
354435hhahfhg
[A-Z]:僅表示所有的大寫字母
[root@localhost ~]# grep "[A-Z]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
ABCD
[0-9]:僅表示所有的十進制數碼
[root@localhost ~]# grep "[0-9]" liuneng
If you give me 8 apples, i will have 15 apples.
22345
354435hhahfhg
次數匹配類:該類字符前面的一個字符可以出現的次數;
[root@localhost ~]# touch nihao
[root@localhost ~]# vim nihao
[root@localhost ~]# cat nihao
aabbcc abc acbcaaabbbvvfffccdaw
afggsdgalkljglas;dgj;l
;sldfkjlsfkj
flksajfldjkl
eoifjwoinihoahg
ljkjjjjjgggke
*:其前面的字符可以出現任意次,即:0次、1次或多次
[root@localhost ~]# grep "a*b" nihao
aabbcc abc acbcaaabbbvvfffccdaw
\?:其前面的字符可有可無,即:0次或1次;
[root@localhost ~]# grep "d\?v" nihao
aabbcc abc acbcaaabbbvvfffccdaw
\+:前面的字符至少出現一次;
[root@localhost ~]# grep "s\+d" nihao
afggsdgalkljglas;dgj;l
\{m,n\}:其前面的字符至少出現m次,最多不超過n次;
[root@localhost ~]# grep "g\{1,2\}" nihao
afggsdgalkljglas;dgj;l
eoifjwoinihoahg
ljkjjjjjgggke
[root@localhost ~]# grep "g\{1,2\}s" nihao
afggsdgalkljglas;dgj;l
\{m\}:其前面的字符必須出現m次;
[root@localhost ~]# grep "j\{1\}w" nihao
eoifjwoinihoahg
\{m,\}:其前面的字符至少出現m次;
[root@localhost ~]# grep "j\{1,\}w" nihao
eoifjwoinihoahg
\{,n\}:其前面的字符出現次數不超過n次,最少0次
[root@localhost ~]# grep "g\{,3\}k" nihao
afggsdgalkljglas;dgj;l
;sldfkjlsfkj
flksajfldjkl
ljkjjjjjgggke
註意:在正則表達式中,表示任意長度的任意字符:.*
位置錨定字符:
行錨定:
行首錨定:^
行尾錨定:$
字錨定:
字首錨定:\<或\b
字尾錨定:\>或\b
示例:尋找文件中空白行行數
[root@localhost ~]# grep "^[[:space:]]*$" nihao | wc -l
3
分組與前向引用字符:
\(\):將()中包含的內容作為一個不可分割的整體來處理;
示例:
[root@localhost ~]# grep "\(us\)\+e" /etc/passwd
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
\1,\2,\3,……: 前向引用
正則表達式處理引擎的內置變量,\1表示前面所出現的第一組()中括選的內容,\2表示前面所出現的第二組()中括選的內容……
\(string1\(string2\)\) 或者\(string1\).*\(string2\):\1表示string1,\2表示string2
或者:
\|:將其左右的字符或字符串當做整體對待;
擴展的正則表達式元字符:ERE
[root@localhost ~]# touch liuneng
[root@localhost ~]# vim liuneng
[root@localhost ~]# cat liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
ABCD
22345
354435hhahfhg
字符匹配類:
.:匹配任意的單個字符;
[root@localhost ~]# egrep ".p" liuneng
If you give me 8 apples, i will have 15 apples.
[]:匹配任意指定範圍內的單個字符;
[root@localhost ~]# egrep "[ ]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
[^]:匹配任意指定範圍以外的單個字符;
[root@localhost ~]# egrep "[^T]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
ABCD
22345
354435hhahfhg
下列的所有字符集都可以放置於[]內用於匹配字符集範圍內的單個字符:
[:lower:]:所有的小寫字母
[root@localhost ~]# egrep "[[:lower:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
354435hhahfhg
[:upper:]:所有的大寫字母;
[root@localhost ~]# egrep "[[:upper:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
ABCD
[:digit:]:所有單個的十進制數字;
[root@localhost ~]# egrep "[[:digit:]]" liuneng
If you give me 8 apples, i will have 15 apples.
22345
354435hhahfhg
[:alnum:]:所有的字母和十進制數字;
[root@localhost ~]# egrep "[[:alnum:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
ABCD
22345
354435hhahfhg
[:punct:]:所有的符號;
[root@localhost ~]# egrep "[[:punct:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
[:space:]:表示空白字符,包括空格和制表符;
[root@localhost ~]# egrep "[[:space:]]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
[:xdigit:] :所有16進制的數字;
下面這三個要嚴格與 Globbing——文件名通配符中的bash內建字符集區分開
[a-z]:僅表示所有的小寫字母
[root@localhost ~]# egrep "[a-z]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
abcd
354435hhahfhg
[A-Z]:僅表示所有的大寫字母
[root@localhost ~]# egrep "[A-Z]" liuneng
She is a good girl.
The dog likes eating bone.
If you give me 8 apples, i will have 15 apples.
Today is not a good day.
ABCD
[0-9]:僅表示所有的十進制數碼
[root@localhost ~]# egrep "[0-9]" liuneng
If you give me 8 apples, i will have 15 apples.
22345
354435hhahfhg
次數匹配類:該類字符前面的一個字符可以出現的次數;
[root@localhost ~]# touch nihao
[root@localhost ~]# vim nihao
[root@localhost ~]# cat nihao
aabbcc abc acbcaaabbbvvfffccdaw
afggsdgalkljglas;dgj;l
;sldfkjlsfkj
flksajfldjkl
eoifjwoinihoahg
ljkjjjjjgggke
*:其前面的字符可以出現任意次,即:0次、1次或多次
[root@localhost ~]# egrep "a*b" nihao
aabbcc abc acbcaaabbbvvfffccdaw
?:其前面的字符可有可無,即:0次或1次;
[root@localhost ~]# egrep "d?v" nihao
aabbcc abc acbcaaabbbvvfffccdaw
+:前面的字符至少出現一次;
[root@localhost ~]# egrep "s+d" nihao
afggsdgalkljglas;dgj;l
{m,n}:其前面的字符至少出現m次,最多不超過n次;
[root@localhost ~]# egrep "g{1,2}" nihao
afggsdgalkljglas;dgj;l
eoifjwoinihoahg
ljkjjjjjgggke
[root@localhost ~]# egrep "g{1,2}s" nihao
afggsdgalkljglas;dgj;l
{m}:其前面的字符必須出現m次;
[root@localhost ~]# egrep "j{1}w" nihao
eoifjwoinihoahg
{m,}:其前面的字符至少出現m次;
[root@localhost ~]# egrep "j{1,}w" nihao
eoifjwoinihoahg
{,n}:其前面的字符出現次數不超過n次,最少0次
[root@localhost ~]# egrep "g{,3}k" nihao
afggsdgalkljglas;dgj;l
;sldfkjlsfkj
flksajfldjkl
ljkjjjjjgggke
註意:在正則表達式中,表示任意長度的任意字符:.*
位置錨定字符:
行錨定:
行首錨定:^
行尾錨定:$
字錨定:
字首錨定:\<或\b
字尾錨定:\>或\b
示例:尋找文件中空白行行數
[root@localhost ~]# egrep "^[[:space:]]*$" nihao | wc -l
3
分組與前向引用字符:
():將()中包含的內容作為一個不可分割的整體來處理;
正則表達式處理引擎的內置變量,1表示前面所出現的第一組()中括選的內容,2表示前面所出現的第二組()中括選的內容……
(string1(string2)) 或者(string1).*(string2):1表示string1,2表示string2
或者:
|:將其左右的字符或字符串當做整體對待
“C |cat” C cat
grep系:
grep:僅支持基本正則表達式元字符
egrep:可以支持擴展正則表達式元字符
fgrep:不支持任何形式的正則表達式元字符,將所有的字符都視為沒有任何特殊意義的普通文本字符:
常用選項:
-A num:同時顯示被PATTERN匹配到的行及其後續num行;
-B num:同時顯示被PATTERN匹配到的行及其前面num行;
-C num:同時顯示被PATTERN匹配到的行及其前後num行;
--color[=WHEN]:以高亮顏色顯示匹配到的內容;
-c,--count:不輸出被PATTERN匹配的行的內容,而是輸出被PATTERN匹配到的行數;
-E, --extended-regexp:可以使grep命令支持擴展正則表達式元字符;相當於執行了egrep命令;
-F, --fixed-strings, --fixed-regexp:相當於fgrep
-e PATTERN, --regexp=PATTERN;指定多個PATTERN在一個命令行中生效;
-f FILE, --file=FILE:從指定的文件中讀取多個PATTERN用一次搜索;
-i, --ignore-case:忽略文件中字符的大小寫
-o, --only-matching:僅顯示被PATTERN匹配到的部分,關閉貪婪模式(在我們取字符串的時候很有用)
-q, --quiet, --silent:安靜模式;相當於grep > /dev/null
-v, --invert-match:顯示沒有被PATTERN匹配到的行;
本文出自 “運維” 博客,謝絕轉載!
編程語言和shell編程的基礎內容以及grep、egrep命令及相應的正則表達式和用法