正則表達式分兩類:python
. 匹配任意單個字符,能夠是一個漢字 [] 匹配指定範圍的任意單個字符,例如:[grain] [0-9] [a-z] [^] 匹配指定範圍外的任意單個字符,例如:[^grain] [:alnum:] 字母和數字 [:alpha:] 表明任何英文大小寫字母,即a-z,A-Z [:lower:] 小寫字母,至關於a-z [:upper:] 大寫字母 [:blank:] 空白字符 [:space:] 水平和垂直的空白字符 [:digit:] 十進制數字 ……
用在要指定次數的字符後面,用於指定前面的字符要出現的次數git
* 匹配前面的字符任意次,包括0次 .* 任意長度的任意字符 \? 匹配其前面的字符0或1次 \+ 匹配其前面的字符至少1次 \{n\} 匹配前面的字符n次 \{m,n\} 匹配前面的字符至少m次,至多n次 \{,n\} 匹配前面的字符至多n次,<=n \{n,\} 匹配前面的字符至少n次
^ 行首錨定,用於模式的最左側 $ 行尾錨定,用於模式的最右側 ^PATTERN$ 用於模式匹配整行 ^$ 空行 ^[:space:]$ 空白行 \< 詞首錨定,用於單詞模式的左側 \> 詞尾錨定,用於單詞模式的右側 \<PATTERN\> 匹配整個單詞
分組:()將多個字符捆綁在一塊兒,看成一個總體處理,例如:\(root\)+正則表達式
後向引用:分組括號中的模式匹配到的內容會被正則表達式引擎記錄與內部的變量中,這些變量的命名方式爲:\1,\2,\3……, \1 表示從左側起第一個左括號以及與之匹配右括號之間模式匹配到的字符shell
或者: \|vim
\(string1\(string2\)\) \1: string1\(string2\) \2: sting2
. 匹配任意單個字符,能夠是一個漢字 [] 匹配指定範圍的任意單個字符,例如:[grain] [0-9] [a-z] [^] 匹配指定範圍外的任意單個字符,例如:[^grain] [:alnum:] 字母和數字 [:alpha:] 表明任何英文大小寫字母,即a-z,A-Z [:lower:] 小寫字母,至關於a-z [:upper:] 大寫字母 [:blank:] 空白字符 [:space:] 水平和垂直的空白字符 [:digit:] 十進制數字 ……
* 匹配前面字符任意次 ? 0或1次 + 1次或屢次 {n} 匹配n次 {m,n} 至少m,至多n次
^ 行首 $ 行尾 \<,\b 詞首 \>,\b 詞尾
() 分組 後向引用:\1,\2,... | 或者 a|b #a或b C|cat #C或cat (C|c)at #Cat或cat
做用:文本搜索工具,根據用戶指定的「模式」對目標逐行進行匹配檢查,打印匹配到的行bash
模式:由正則表達式字符及文本字符所編寫的過濾條件ide
格式:工具
grep [OPTIONS] PATTERN [FILE...]
常見選項:spa
--color=auto 對匹配到的文本着色顯示 -m # 匹配#次後中止 -v 顯示不被pattern匹配到的行 -i 忽略字符大小寫 -n 顯示匹配的行號 -c 統計匹配的行數 -o 僅顯示匹配到的字符串 -q 靜默模式,不輸出任何信息 -A # 後#行 -B # 前#行 -C # 先後各#行 -e 多個選項間邏輯or關係 如:grep -e 'cat' -e 'dog' file -w 匹配整個單詞 -E 使用ERE,至關於egrep -f file 根據模式文件處理 -r 遞歸目錄,但不處理軟連接 -R 遞歸目錄,並處理軟連接 [root@CentOS8 ~]#df | grep '/dev/sd' /dev/sda2 104806400 2311224 102495176 3% / /dev/sda5 52403200 402140 52001060 1% /data /dev/sda1 1038336 172128 866208 17% /boot [root@CentOS8 ~]#df|grep '^/dev/sd'|tr -s ' ' %|cut -d% -f5|sort -n|tail -1 17
格式:操作系統
sed [option]... 'script;script;...' inputfile...
經常使用選項:
-n 不輸出模式空間內容到屏幕,即不自動打印 -e 多點編輯 -f file 從指定文件中讀取編輯腳本 -r,-E 使用擴展正則表達式 -i 原處編輯,加後綴表明備份並編輯
script格式:
'地址命令'
地址格式:
1. 不給地址: 對全文進行處理 2. 單地址: #:指定的行, $:最後一行 /pattern/: 被此處模式所匹配到的每一行 3. 地址範圍: #,# 從#行到#行,3,6 從第3行到第6行 #,+# 從#行到+#行,3,+4 從3行到第7行 4. 步長:~ 1~2 奇數行 2~2 偶數行
命令:
p 打印當前模式空間內容,追加到默認輸出以後 Ip 忽略大小寫輸出 d 刪除模式空間匹配的行,並當即啓用下一輪循環 a [\\]text 之指定行後面追加文本,支持使用\n實現多行追加 i [\\]text 在行前面插入文本 c [\\]text 替換行爲單行或多行文本 w /path/file 保存模式匹配的行至指定文件 r /path/file 讀取指定文件的文本至模式空間中匹配到的行後 = 爲模式空間中的行打印行號 ! 模式空間中匹配行取反 s/pattern/string/修飾符 查找替換,支持使用分隔符,也可使用:s@@@,s### 替換修飾符: g 行內全局替換 p 顯示替換成功的行 w /path/file 將替換成功的行保存到文件中 I,i 忽略大小寫 [root@CentOS8 ~]#sed -n '1,4p' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@CentOS8 ~]#
格式:
awk [OPTIONS] 'program' var=value file... awk [OPTIONS] -f programfile var=value file...
說明:
program一般是被放在單引號中,並能夠由三種部分組成
常見選項:
Program格式:
pattern{action;...}
pattern:決定動做語句什麼時候觸發及觸發事件,好比:BEGIN,END,正則表達式等
action:對數據進行處理,放在{}內指明,常見:print,printf
動做 print
格式:
print item1,item2,...
說明:
[root@CentOS8 ~]#awk -F: -v OFS=':' '/root/{print $1,$3,$7}' /etc/passwd root:0:/bin/bash operator:11:/sbin/nologin [root@CentOS8 ~]#
[root@CentOS8 ~]#echo `grep -v '/sbin/nologin' /etc/passwd |wc -l` && grep -v '/sbin/nologin' /etc/passwd | cut -d: -f1 12 root sync shutdown halt lee num number mageia slackware user1 user2 user3 [root@CentOS8 ~]#awk '!/\/sbin\/nologin/{print $NF}' /etc/passwd | wc -l 12 [root@CentOS8 ~]#awk -F: '!/\/sbin\/nologin/{print $1}' /etc/passwd root sync shutdown halt lee num number mageia slackware user1 user2 user3 [root@CentOS8 ~]#echo `awk '!/\/sbin\/nologin/{print $NF}' /etc/passwd | wc -l` && awk -F: '!/\/sbin\/nologin/{print $1}' /etc/passwd 12 root sync shutdown halt lee num number mageia slackware user1 user2 user3 [root@CentOS8 ~]#
[root@CentOS8 ~]#awk -F: '{print $1,$3,$7}' /etc/passwd | sort -nr -k2|head -n1 nobody 65534 /sbin/nologin [root@CentOS8 ~]#getent passwd | sort -t: -k3 -n|tail -n1|cut -d: -f1,3,7 nobody:65534:/sbin/nologin
[root@CentOS8 ~]ss -nt | tail -n +2 | tr -s ' ' : | cut -d: -f6|sort|uniq -c|sort -nr [root@CentOS8 ~]ss -nt | grep "^ESTAB" | tr -s ' ' : | cut -d: -f6|sort|uniq -c|sort -nr [root@CentOS8 ~]ss -nt | awk -F" +|:" '/^ESTAB/{print $(NF-2)}' |sort|uniq -c | sort -nr
三種常見模式:
命令模式 --> 插入模式
i insert,在光標所在處插入 I 在當前光標所在行的行首輸入 a 在光標所在處的後面輸入 A 在當前光標所在行的行尾輸入 o 在當前光標所在行的下方打開一個新行 O 在當前光標所在行的上方打開一個新行
w 寫磁盤文件 wq 寫入並退出 q! 不存盤退出 wq! 強制存盤退出 r file 讀文件內容到當前文件中 w file 將當前文件內容寫入另外一個文件 !command 執行命令 r!command 讀入命令的輸出
/part1/,/part2/ #從第一次被part1匹配開始,一直到第一次被part2匹配結束 /pattern/ #從當前行向下查找,直到匹配pattern的第一行 % #全文,至關於1,$ $ #最後一行 .,$-1 #當前行到倒數第二行 # #第 # 行 #,# #從左側#起始行,到右側#結束行
d #刪除 y #複製 w file #指定範圍的行另存至指定文件中 r file #在指定位置插入指定文件中的全部內容
格式
s/要查找的內容/替換的內容/修飾符 修飾符: i #忽略大小寫 g #全局替換,默認狀況下,每一行只替換第一次出現 gc #全局替換,每次替換前詢問 要查找的內容: 可以使用基本正則表達式 替換爲的內容: 不能使用模式,可是可使用後向引用\1,\2,...等符號,還可使用 "&" 引用前面查找時查到的整個內容
配置文件
/etc/vimrc #全局 ~/.vimrc #我的
經常使用特性:
行號 顯示: set number, 簡寫 set nu 取消顯示:set nonumber,簡寫 set nonu 複製保留格式 啓用: set paste 禁用: set nopaste Tab用指定空格個數代替 啓用: set tabstop=# 指定#個空格代替Tab 簡寫: set ts=# 光標所在行標識線 啓用: set cursorline,簡寫 set cul 禁用: set nocursorline
字符間跳轉:
h:左 l:右 j:下 k:上
單詞間跳轉:
w: 下一個單詞詞首
e: 當前或下一個單詞詞尾
b: 當前或前一個單詞詞首
當前頁跳轉:
H: 頁首 M:頁中間行 L:頁底
zt:將光標所在當前行移到屏幕頂端
zz:將光標所在當前行移到屏幕中間
zb:將光標所在當前行移到屏幕底端
行首行尾跳轉:
^ 第一個非空白字符
0 行首
$ 行尾
行間移動:
#G或 :# 跳轉到#行
G 最後一行
1G,gg 第一行
句間移動:
)下一句 ( 上一句
翻屏操做:
Ctrl+f 向文件尾部翻一屏 Ctrl+b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏 Ctrl+u 向文件首部翻半屏
刪除命令:
d 刪除,結合光標跳轉能夠實現範圍刪除
d$ 刪除到行尾
d^ 刪除到非空行首
dd 剪切光標所在行
#dd 多行刪除
D:從當前光標位置一直刪除到行尾,至關於d$
複製命令:
y$ 複製
y0 複製到行尾
y^ 複製到非空行首
yy 複製行
#yy 複製多行
Y: 複製整行
查找:
/pattern: 從當前光標所在處向文件尾部查找
?pattern: 從當前光標所在處向文件首部查找
n: 與命令同方向
N: 與命令反方向
撤銷更改:
u 撤銷最近的更改
#u 撤銷以前屢次更改
U 撤銷光標落在這行後全部此行的更改
. 重複前一個操做
#. 重複前一個操做#次
shell腳本:包含一些命令或聲明,並符號必定格式的文本文件
格式要求: 首行shebang機制
#!/bin/bash #!/usr/bin/python #!/usr/bin/perl
[root@CentOS8 script]#bash disk.sh 17 [root@CentOS8 script]#cat disk.sh #!/bin/bash df -h| awk -F" +|%" '/\/dev\/sd/{print $5}'|sort -nr|head -n1
[root@CentOS8 script]#cat system_info.sh #!/bin/bash RED="\E[1;31m" GREEN="echo -e \E[1;32m" END="\E[0m" $GREEN-------------------Host systeminfo--------------------$END echo -e "HOSTNAME: $RED`hostname`$END" echo -e "IPADDR: $RED`ifconfig ens33|grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' |head -n1`$END" echo -e "OSVERSION: $RED`cat /etc/redhat-release`$END" echo -e "KERNEL: $RED`uname -r`$END" echo -e "CPU: $RED`lscpu|grep 'Model name'|tr -s ' '|cut -d: -f2`$END" echo -e "MEMORY: $RED`free -h|grep Mem|tr -s ' ' :|cut -d: -f2`$END" echo -e "DISK: $RED`lsblk|awk '/^sd/{print $1,$4}'`$END" $GREEN------------------------------------------------------$END [root@CentOS8 script]#