Linux運維云升筆記(一):正則運算式以及文本編輯利器sed
正則運算式概述
使用單個字符來描述、匹配一系列符合某個陳述句規則的字串,由普通字符與特殊字符組成,正則運算式廣泛使用在腳本編程、文本編輯器中。
正則運算式簡寫為regex、regexp、RE。
在大多數語言當中正則運算式都被包括在兩個正斜杠當中’/’
正則運算式有一個特點貪婪匹配:盡量匹配最長的的東西
正則運算式分類
基礎正則運算式
\ 轉義字符。例如:“\!”將邏輯否的!看做普通字符,\還可以折行
例子1:
[root@localhost ~]# ls -l /home \
> /tmp
例子2:
[root@localhost ~]# grep "b.*in" a.txt
12 bin 34
23 sb.*in 23
44 binary 49
23 binlog 23
[root@localhost ~]# grep "b\.\*in" a.txt
23 sb.*in 23
1
2
3
4
5
6
7
8
9
10
11
^ 匹配字串開始的位置,以…為開頭的
$ 匹配字串結束的位置,以…為結尾的
^$ 表示空行,不是空格
例子:
[root@localhost ~]# cat a.txt
aa
aa bb aa
a b a
[root@localhost ~]# grep "^aa$" a.txt
aa
1
2
3
4
5
6
7
. 匹配任意字串
* 匹配前面子運算式(字符)0次或者多次
例子:
[root@localhost ~]# grep "a 0*" a.txt
aa 0
aa 00
aa bb 0000 aa 00
a b a 000
.* 匹配任意字串
[list] 匹配list串列中的一個字符,例如:[abc]、[a-z]、[a-zA-Z0-9]
例子:
[root@localhost ~]# ifconfig ens32 | grep "TX [pe]"
TX packets 1776 bytes 206946 (202.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[^list] 匹配任意非list表中的一個字符,例如:[^a-z]、[^0-9]、[^A-Z0-9]
例子:
[root@localhost ~]# ifconfig ens32 | grep "TX [a-f]"
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ifconfig ens32 | grep "TX [^a-f]"
TX packets 1814 bytes 210662 (205.7 KiB)
\{n\} 匹配前面子運算式n次
例子:
[root@localhost ~]# grep "a 0\{2\}" a.txt
aa 00
aa bb 0000 aa 00
a b a 000
\{n,\} 匹配前面子運算式至少n次
[root@localhost ~]# grep "a 0\{2,\}" a.txt
aa 00
aa bb 0000 aa 00
a b a 000
\{n,m\} 匹配前面子運算式最少n次,最大m次
\< 詞首牟定:固定詞首
\> 詞未牟定:固定詞尾
例子:
[root@localhost ~]# grep "\<a\>" a.txt
a b a 000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
轉義字符 意義
\a 響鈴(BEL)
\b 退格(BS),將當前位置移到前一列
\n 換行(LF)將當前位置移到下一行的開頭
\r 回車(CR)將當前位置移動到本行開頭
\t 水平制表(HT)調到下一個TAB位置
\v 垂直制表(VT)
\ 代表一個反斜杠字符“\”
擴展正則運算式
+ 匹配前面子運算式1次及以上
? 匹配前面子運算式0次或者1次
() 將括號中的字串作為一個整體
| 以或的方式匹配字串
1
2
3
4
Linux中常用的文本處理工具
grep 匹配,查詢(過濾)
sed 編輯(增加,洗掉,修改)
awk 文本格式化(字串提取)
注意事項:
Linux中正則一般以行為單位處理檔案
alias grep=‘grep --color=auto’
注意字符集,LANG=C
通配符
正則運算式和我們命令列中使用的通配符是有本質區別的。
通配符一般是處理檔案名的
ls -l *.txt
*:任意長度任意字串,屬于通配符。
?:單個任意字串,屬于通配符。
grep命令的引數:
-v 排除匹配的內容(取反)
-E 支持擴展正則運算式=egrep
[root@localhost ~]# grep -Ev "^$|#" /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
1
2
3
4
-i 忽略大小寫
[root@localhost ~]# cat a.txt
aAAA
[root@localhost ~]# grep -i "a" a.txt
aAAA
[root@localhost ~]#
1
2
3
4
5
-o 只輸出匹配的內容
[root@localhost ~]# grep -o "root" /etc/passwd
root
root
1
2
3
–color=auto 匹配的內容顯示顏色(用的不多 alias查看別名)
-n 在行首顯示行號
[root@localhost ~]# grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
43:admin:x:1000:1000:root:/home/admin:/bin/bash
1
2
3
4
-q 匹配內容不顯示(靜默輸出,一般寫腳本的時候用而不輸出到螢屏)
-w 將過濾條件當成單詞來匹配
[root@localhost ~]# grep -w "bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
admin:x:1000:1000:root:/home/admin:/bin/bash
1
2
3
4
5
[root@localhost ~]# grep "bin" /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
1
2
3
4
-c 只輸出匹配行的計數
[root@localhost ~]# grep -c "root" /etc/passwd
3
1
2
小知識:
nohup 運行的腳本 //不依賴終端運行腳本,會將資訊放到nohup檔案里
uj5u.com熱心網友回復:
謝謝分享, 基礎知識請發到個人博客uj5u.com熱心網友回復:
好的轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/125951.html
標籤:基礎類
