vim是一款強大的文本編輯器,它和 vi 使用方法一致,但功能更爲強大。官網:www.vim.org、中文手冊:http://vimcdoc.sourceforge.net/nginx
1.2.1命令格式git
vim [options] [file ..]
經常使用選項正則表達式
說明:當使用vim打開文件的時候,若是該文件存在,文件被打開並顯示內容。若是該文件不存在,當編輯後第一次存盤時建立它shell
1.2.2vim三種模式的切換vim
三種模式分爲windows
命令或普通模式、插入模式、擴展模式centos
i insert, 在光標所在處輸入 I 在當前光標所在行的行首輸入 a append, 在光標所在處後面輸入 A 在當前光標所在行的行尾輸入 o 在當前光標所在行的下方打開一個新行 O 在當前光標所在行的上方打開一個新行
w 寫(存)磁盤文件 wq 寫入並退出 x 寫入並退出加密 q 退出,若是修改了內容沒法退出 q! 強制不存盤退出,即便更改都將丟失 r filename 讀文件內容到當前文件中 !command 執行命令 r!command 讀入命令的輸出
格式bash
:start_pos,end_pos CMD
地址定界符app
# #具體第#行,例如2表示第2行 #,# #從左側#表示起始行,到右側#表示結尾行 #,+# #從左側#表示的起始行,加上右側#表示的行數,範例:2,+3 表示2到5行 . #當前行 $ #最後一行 .,$-1 #當前行到倒數第二行 % #全文, 至關於1,$ /pattern/ #從當前行向下查找,直到匹配pattern的第一行,即:正則表達式 /pat1/,/pat2/ #從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束 #,/pat/ #從指定行開始,一直找到第一個匹配patttern的行結束 /pat/,$ #向下找到第一個匹配patttern的行到整個文件的結尾的全部行
地址定界後可跟一個編輯命令less
d #刪除 y #複製 w file #將範圍內的行另存至指定文件中 r file #在指定位置插入指定文件中的全部內容
s/要查找的內容/替換爲的內容/修飾符
說明
要查找的內容:可以使用基末正則表達式模式 替換爲的內容:不能使用模式,但可使用\1, \2, ...等後向引用符號;還可使用「&」引用前面查找時查 找到的整個內容
修飾符:
i #忽略大小寫 g #全局替換,默認狀況下,每一行只替換第一次出現 gc #全局替換,每次替換前詢問
查找替換中的分隔符/可替換爲其它字符,如:#,@
s@/etc@/var@g s#/boot#/#i
配置文件:
/etc/vimrc #全局 ~/.vimrc #我的 #行號 顯示:set number,簡寫 set nu 取消顯示:set nonumber, 簡寫 set nonu #忽略字符的大小寫 啓用:set ignorecase,簡寫 set ic 不忽略:set noic #自動縮進 啓用:set autoindent,簡寫 set ai 禁用:set noai #設置光標所在行的標識線 啓用:set cursorline,簡寫 set cul 禁用:set nocursorline #Tab用指定空格的個數代替 啓用:set tabstop=# 指定#個空格代替Tab 簡寫:set ts=4 #文件格式 啓用windows格式:set fileformat=dos 啓用unix格式:set fileformat=unix 簡寫 set ff=dos|unix #Tab 用空格代替 啓用:set expandtab 默認爲8個空格代替Tab 禁用:set noexpandtab 簡寫:set et #語法高亮 啓用:syntax on 禁用:syntax of #高亮搜索 啓用:set hlsearch 禁用:set nohlsearch #顯示Tab和換行符 ^I 和$顯示 啓用:set list 禁用:set nolist #set showcmd 顯示命令模式下輸入的字符
ZZ | wq 保存退出
ZQ | q 不保存退出
字符間跳轉:
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 向文件首部翻半屏
x 刪除光標處的字符
xp 交換光標所在處的字符及其後面字符的位置
r 只替換光標所在處的一個字符
R 切換成REPLACE模式(在末行出現-- REPLACE -- 提示),按ESC回到命令模式
d 刪除命令,可結合光標跳轉字符,實現範圍刪除
d$ 刪除到行尾
d^ 刪除到非空行首
d0 刪除到行首
dd: 剪切光標所在的行
D:從當前光標位置一直刪除到行尾,等同於d$
y 複製,行爲類似於d命令
p 緩衝區存的若是爲整行,則粘貼當前光標所在行的下方;不然,則粘貼至當前光標所在處的後面
P 緩衝區存的若是爲整行,則粘貼當前光標所在行的上方;不然,則粘貼至當前光標所在處的前面
c: 刪除後切換成插入模式
c$
c^
c0
cb
/PATTERN:從當前光標所在處向文件尾部查找
?PATTERN:從當前光標所在處向文件首部查找
n:與命令同方向
N:與命令反方向
u 撤銷最近的更改,至關於windows中ctrl+z
#u 撤銷以前屢次更改
U 撤消光標落在這行後全部此行的更改
Ctrl - r 重作最後的「撤消」更改,至關於windows中crtl+y
. 重複前一個操做
常見Command:y 複製、d 刪除、gU 變大寫、gu 變小寫
範例
0y$ 命令 #粘貼一個字符100次 100ihello [ESC]
di" 光標在」 「之間,則刪除」 「之間的內容
yi( 光標在()之間,則複製()之間的內容
vi[ 光標在[]之間,則選中[]之間的內容
dtx 刪除字符直到碰見光標以後的第一個 x 字符
ytx 複製字符直到碰見光標以後的第一個 x 字符
在末行有」-- VISUAL -- 「指示,表示在可視化模式
進入可視化模式按鍵
vim FILE1 FILE2 FILE3 ...
:next 下一個
:prev 前一個
:first 第一個
:last 最後一個
:wall 保存全部
:qall 不保存退出全部
:wqall保存退出全部
vim -o|-O FILE1 FILE2 ...
-o: 水平或上下分割
-O: 垂直或左右分割(vim only)
在窗口間切換:Ctrl+w+方向鍵
Ctrl+w+s:split, 水平分割,上下分屏
Ctrl+w+v:vertical, 垂直分割,左右分屏
ctrl+w+q:取消相鄰窗口
ctrl+w+o:取消所有窗口
:wqall 退出
有26個命名寄存器和1個無命名寄存器,常存放不一樣的剪貼版內容,能夠在同一個主機的不一樣會話(終 端窗口)間共享
寄存器名稱a,b,…,z,格式: 」寄存器 放在數字和命令之間
範例:
3"tyy 表示複製3行到t寄存器中 ,末行顯示 3 lines yanked into "t "tp 表示將t寄存器內容粘貼
ma 將當前位置標記爲a,26個字母都可作標記, mb 、 mc 等等
'a 跳轉到a標記的位置,實用的文檔內標記方法,文檔中跳躍編輯時頗有用
qa 錄製宏 a,a爲宏的名稱,末行提示: recording @a
q 中止錄製宏
@a 執行宏 a
@@ 從新執行上次執行的宏
cat 能夠查看文本內容
cat [OPTION]... [FILE]...
常見選項
nl:顯示行號,至關於cat -b
nl [OPTION]... [FILE]...
tac:逆向顯示文本內容
tac [OPTION]... [FILE]...
rev:將同一行的內容逆向顯示
rev [option] [file...] [root@centos8 data]# rev lx.txt ba321 [root@centos8 data]# cat lx.txt 123ab
hexdump:以十六進制,十進制,八進制或ASCII顯示文件內容
hexdump [options] file... -C 十六進制+ASCII顯示 [root@centos8 data]# hexdump -C lx.txt 00000000 31 32 33 61 62 0a |123ab.| 00000006 [root@centos8 data]# cat lx.txt 123ab
more:分頁查看文件(文本翻至尾部就會自動退出)
more [options] file...
常見選項
less:分頁查看文件(文本末頁不會自動退出)
less 命令是man命令使用的分頁器
[root@centos8 data]# cat passwd | less
head:顯示文件或者標準輸入前面內容
head [OPTION]... [FILE]...
常見選項
範例
[root@centos8 data]# head -2 lx.txt 1 2
tail:和head 相反,查看文件或標準輸入的倒數行
tail [OPTION]... [FILE]...
經常使用選項
範例
[root@centos8 data]# tail -2 /data/lx.txt 9 10 #只查看最新發生的日誌 [root@centos8 data]# tail -fn0 /data/lx.txt ab
cut:提取文本文件或者STDIN數據指定列
cut OPTION... [FILE]...
經常使用選項
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第#個字段,例如:3
#,#[,#]:離散的多個字段,例如:1,3,6
#-#:連續的多個字段, 例如:1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定輸出分隔符
範例
#查看主機IP地址 [root@centos8 data]# ifconfig | head -2 | tail -1 | tr -s ' ' | cut -d' ' -f3 172.22.73.89 #顯示df命令中磁盤使用率 [root@centos8 data]# df | tr -s ' ' | cut -d' ' -f5 | tr -dc '[0-9\n]' 0 0 [root@centos8 data]# df | tr -s ' ' % | cut -d% -f5 | tr -d [:alpha:] 0 0
paste:合併多個文件同行號列到一行
paste [OPTION]... [FILE]...
經常使用選項
wc:統計文件的行總數、單詞總數、字節總數和字符總數
wc [OPTION]... [FILE]...
經常使用選項
[root@centos8 data]# wc -l lx.txt 2 lx.txt
sort:把整理過的文本顯示在STDOUT,不改變原始文件
sort [OPTION]... [FILE]...
經常使用選項
範例
#統計日誌訪問量 [root@centos8 data]#cut -d" " -f1 /var/log/nginx/access_log |sort -u|wc -l 201 [root@centos8 data]# cut -d: -f1,3 passwd | sort -k2 -nr | head -5 user3:2004 user2:2003 user1:1002 user:1001 unbound:996
uniq:命令從輸入中刪除先後相接的重複的行
uniq [OPTION]... [INPUT [OUTPUT]]
經常使用選項
uniq常和sort 命令一塊兒配合使用:
範例
#統計日誌訪問量最多的請求 [root@centos8 data]# cut -d" " -f1 access_log | sort | uniq -c | sort -nr | head -1 2834 172.20.0.222 #取兩個文件的相同行 [root@centos8 data]# cat a.txt b.txt | sort | uniq -d 200 #取兩個文件的不一樣行 [root@centos8 data]# cat a.txt b.txt | sort | uniq -u 100 123 23 3321 34556
diff:令比較兩個文件之間的區別
diff [OPTION]... FILES [root@centos8 data]# cat a.txt b.txt a b c a b bc [root@centos8 data]# diff a.txt b.txt 3c3 < c --- > bc
正則表達式分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
幫助:man 7 regex
與通配符不一樣,通配 符功能是用來處理文件名,而正則表達式是處理文本內容中字符
. 匹配任意單個字符,能夠是一個漢字 [] 匹配指定範圍內的任意單個字符,示例:[wang] [0-9] [a-z] [a-zA-Z] [^] 匹配指定範圍外的任意單個字符,示例:[^wang] [:alnum:] 字母和數字 [:alpha:] 表明任何英文大小寫字符,亦即 A-Z, a-z [:lower:] 小寫字母,示例:[[:lower:]],至關於[a-z] [:upper:] 大寫字母 [:blank:] 空白字符(空格和製表符) [:space:] 水平和垂直的空白字符(比[:blank:]包含的範圍廣) [:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...) [:digit:] 十進制數字 [:xdigit:]十六進制數字 [:graph:] 可打印的非空白字符 [:print:] 可打印字符 [:punct:] 標點符號
* 匹配前面的字符任意次,包括0次,貪婪模式:儘量長的匹配 .* 任意長度的任意字符 \? 匹配其前面的字符0或1次,即:無關緊要 \+ 匹配其前面的字符至少1次,即:確定有,>=1 \{n\} 匹配前面的字符n次 \{m,n\} 匹配前面的字符至少m次,至多n次 \{,n\} 匹配前面的字符至多n次,<=n \{n,\} 匹配前面的字符至少n次
^ 行首錨定,用於模式的最左側 $ 行尾錨定,用於模式的最右側 ^PATTERN$ 用於模式匹配整行 ^$ 空行 ^[[:space:]]*$ 空白行 \< 或 \b 詞首錨定,用於單詞模式的左側 \> 或 \b 詞尾錨定,用於單詞模式的右側 \<PATTERN\> 匹配整個單詞
分組
分組:() 將多個字符捆綁在一塊兒,看成一個總體處理,如:(root)+ 後向引用:分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中,這些變量的命名 方式爲: \1, \2, \3, ...
\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
或者
a\|b #a或b C\|cat #C或cat \(C\|c\)at #Cat或cat
擴展正則於正則用法基本相同,大部分擴展正則相比正則只是取消了反斜線
. 任意單個字符 [wang] 指定範圍的字符 [^wang] 不在指定範圍的字符 [:alnum:] 字母和數字 [:alpha:] 表明任何英文大小寫字符,亦即 A-Z, a-z [:lower:] 小寫字母,示例:[[:lower:]],至關於[a-z] [:upper:] 大寫字母 [:blank:] 空白字符(空格和製表符) [:space:] 水平和垂直的空白字符(比[:blank:]包含的範圍廣) [:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...) [:digit:] 十進制數字 [:xdigit:]十六進制數字 [:graph:] 可打印的非空白字符 [:print:] 可打印字符 [:punct:] 標點符號
* 匹配前面字符任意次 ? 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
grep:文本搜索工具,根據用戶指定的「模式」對目標文本逐行進行匹配檢查;打印匹配到的行
grep [OPTIONS] PATTERN [FILE...]
經常使用選項
範例
[root@centos8 data]# grep "whoami" /etc/passwd [root@centos8 data]# grep `whoami` /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin #文件匹配 [root@centos8 data]# cat a.txt b.txt a b c a b d [root@centos8 data]# grep -f a.txt b.txt a b #查看磁盤最高使用率 [root@centos8 data]# df | grep ^/dev/vd | tr -s " " % | cut -d% -f5 7 #計算出全部人年齡之和 [root@centos8 data]# cat lx.txt xiaoming=20 xiaodong=18 xiaoqiang=22 [root@centos8 data]# cut -d= -f2 lx.txt | tr "\n" + | grep -Eo .*[0-9] | bc 60 [root@centos8 data]# grep -Eo [0-9]+ /data/lx.txt | tr "\n" + | grep -Eo .*[0-9] | bc 60
練習
1.統計出/etc/passwd文件中默認其shell爲非/sbin/nologin的用戶個數,並將用戶都顯示出來 [root@centos8 data]# cat /etc/passwd | grep -v /sbin/nologin | cut -d: -f1 root user user1 slackware user2 user3 2.查出用戶UID的最大值的用戶名、UID及shell類型 [root@centos8 data]# cut -d: -f1,3,7 /etc/passwd | sort -k2 -nr | head -1 user3:2004:/bin/bash 3.統計當前鏈接本機的每一個遠程主機IP的鏈接數,並按從小到大排序 [root@centos8 data]# ss -nt | grep ^ESTAB | tr -s " " : | cut -d: -f6 | sort -nr 110.152.191.166 100.100.30.25 4.編寫腳本disk.sh,顯示當前硬盤分區中空間利用率最大的值 [root@centos8 data]# cat lx.txt #/bin/bash! df | grep /dev/vd | tr -s " " % | cut -d% -f5 5.編寫腳本systeminfo.sh,顯示當前主機系統信息,包括:主機名,ipv4地址,操做系統版本,內核版本,cpu型號,內存大小,硬盤大小 1 #/bin/bash! 2 echo 主機名`hostname` 3 echo 地址`ifconfig | head -3 | tail -2 | tr -s " " % | cut -d% -f3 | head -1` 4 echo 操做系統版本`cat /etc/redhat-release` 5 echo 內核版本`uname -r` 6 echo cpu型號`cat /proc/cpuinfo | grep "model name" | cut -d: -f2` 7 echo 內存大小 "`free -h | grep ^Mem | tr -s " " % | cut -d% -f2`" 8 echo 硬盤大小`lsblk | grep 'vda\>' | grep -Eo '[0-9]+[[:upper:]]'`