知識框架圖
學習筆記
查看文本
查看文本內容
cat
-A:顯示控制符
-E:顯示行結束符$
-n:打印行號,顯示空行
-b:打印行號,空行不編號
-s:壓縮連續空白行
tac:反向查看文件內容
rev:文本每行倒序顯示
分頁查看
more
less
查看文件頭尾內容
head
-c:前n個字節
-n:前n行
tail
-c
-n
-f:跟蹤顯示文件變化,常用于日志監控
watch -n 1 tail /var/log/massage
抽取文本內容
cut
-d:分隔符
-fN:指定字段
N:單個字段
,:多個離散字段
-:多個連續字段
混合使用
-c:按字符數
–output-delimiter=:指定輸出分隔符
paste:合并兩個文件的相同行的列為一行
-d 分隔符:默認TAB
-s:所有行合成一行顯示
文本統計
wc
-l:行數
-w:單詞數
-c:字節總數
-m:字符總數
-L:最長行的長度
文本排序
sort
-n:按數字大小排序
-r:逆序
-R:隨機排序
–u:合并相同行
-f:忽略字符串中字符的大小寫
-t c:字段界定符
-k N:指定列號
使用舉例
echo {1..55} | tr ‘ ‘ ‘\n’ | sort -R | head -n 1
seq 55 | sort -R | head -n 1
echo $[RANDOM%55+1] | sort -R | head -n 1
cut -d’ ‘ -f1 access_log | sort -n | uniq -c | sort -nr | tr -s ‘ ‘ | cut -d’ ‘ -f3
last | sort | cut -d” ” -f1 | uniq -c | sort -nr
uniq
-c:顯示連續重復行出現的次數
-d:僅顯示重復過的行
-u:僅顯示未重復過的行
文本處理三劍客
grep:文本過濾,過濾行
sed:行編輯器
awk:文本報告生成器
grep
根據指定模式搜索并打印匹配到的行
-v:反選
-i:忽略大小寫
-n:顯示匹配到的行號
-c:統計匹配到行的數量
-o:僅顯示匹配到的字符串本身
-q:靜默模式
-AN:當前行和后N行
-BN:當前行和前N行
-CN:當前行和前后各N行
nmap -v -sP 172.16.101.0/24 | grep -B1 up | grep “Nmap scan report for” | cut -d’ ‘ -f5
-e:多個模式之間實現邏輯or
-w:匹配整個單詞
-E:使用正則表達式
-F:fgrep
df -h |grep “^/dev/sd” |grep -o ‘[[:digit:]]\+%’ |grep -o ‘[[:digit:]]\+’
正則表達式REGEXP
基本正則表達式
字符匹配
.:任意一個字符
[]:指定范圍內的任意單個字符
[^]:指定范圍外的任意單個字符
[:alnum:] 字母和數字
[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
[:lower:] 小寫字母 [:upper:] 大寫字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
[:digit:] 十進制數字 [:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
匹配次數
*:任意次,工作于貪婪模式
.*:任意長度任意字符
\?:0次或1次
\+:1次或多次
\{m\}:m次
\{m,n\}:m-n次
\{,n\}:最多n次
\{m,\}:最少m次
位置錨定
^:行首錨定
$:行尾錨定
^PATTERN$
^$:空行
^[[:space:]]*$:空白行
\<或\b:詞首錨定
\>或\b:詞尾錨定
\<PATTERN\>
分組
\(\)
后向引用:\1、\2
或者 \|
ifconfig | grep ‘\(\([0-9]\{1,2\}\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\([1-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)’
擴展正則表達式
字符匹配
.:任意單個字符
[]:指定范圍內的單個字符
[^]:指定范圍外的任意單個字符
次數匹配
*:任意次
?:最多1次
+:至少1次
{m}:m次
{m,n}:m-n次
位置錨定
^:行首錨定
$:行尾錨定
^PATTERN$
^$:空白行
\<或\b:詞首錨定
\>或\b:詞尾錨定
\<PATTERN\>
分組
()
后向引用:\1、\2
或者
|
ls *.rpm | grep -Eo “\.\<[[:alnum:]_]+\>\.rpm$” |cut -d. -f2 |sort |uniq -c
ls *.rpm | grep -Eo “\.[^.]+\.rpm$” |cut -d. -f2|sort |uniq -c
ifconfig | grep -E ‘(([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])’
ls *.rpm |rev |cut -d. -f2|rev |sort |uniq -c
sed:行編輯器
語法
sed [option]… ‘script’ inputfile…
常用選項
-n:不輸出模式空間內容到屏幕
-e:多點編輯
-f /path/to/script_file:從指定文件中讀取編輯腳本
-r:支持使用擴展正則表達式
-i.bak:備份文件并原處編輯
script
‘地址+命令’
地址定界
不給地址:全文處理
單個地址
#:指定的行
$:最后一行
/PAT/:模式匹配到的每一行
地址范圍
m,n
m,+n
/PAT1/,/PAT2/
m,/PAT/
步進:~
1~2:奇數行
2~2:偶數行
編輯命令
d:刪除模式空間匹配的行,并進入下一輪循環
p:打印模式空間的內容,追加到默認輸出后
a [\]text:在指定行后面追加文本,\n實現多行追加,\t為Tab
i [\]text:在行前面插入文本
c [\]text:替換行為單行或多行
w /path/to/somefile:保存模式匹配的行到指定文件
r /path/from/somefile:讀取指定文件的文本至模式空間中匹配到行后
=:為模式空間中的行打印行號
!:模式空間中匹配行取反處理
查找替換
s///
替換標記
g:全局替換
p:顯示替換成功的行
w /path/to/somefile:將替換成功的行保存在文件中
sed ‘s/quiet/& net.ifnames=0/’ /etc/default/grub
sed ‘/GRUB_CMDLINE_LINUX/s/”$/ net.ifnames=0 &/’ /etc/default/grub
sed -r ‘/GRUB_CMDLINE_LINUX/s/(.*)”/\1 net.ifnames=0″/’ /etc/default/grub
sed調用變量
“$VAR”
”’VAR”’
高級編輯命令
h:把模式空間中的內容覆蓋至保持空間中
H:把模式空間中的內容追加至保持空間中
g:從保持空間中取出數據覆蓋至模式空間
G:從保持空間中取出數據追加至模式空間
x:把模式空間和保持空間中的內容互換
n:讀取匹配到的行的下一行至模式空間
N:追加匹配到的行的下一行至模式空間
d:刪除模式空間中的行
D:刪除多行模式空間的所有行
使用舉例
sed -n ‘n;p’ FILE:顯示偶數行
sed ‘1!G;h;$!d’ FILE:逆序顯示文件內容
sed ‘$!N;$!D’ FILE:取出文件后兩行
sed ‘$!d’ FILE:取出文件最后一行
sed ‘G’ FILE:每行后面追加空白行
sed ‘/^$/d;G’ FILE:將多個空白行合并成一個空白行,在每行后追加空白行
sed ‘n;d’ FILE:顯示奇數行
sed -n ‘1!G;h;$p’ FILE:逆序顯示文件內容
awk,報告生成器
基本用法
awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] ‘BEGIN{ action;… } pattern{ action;… } END{ action;… }’ file …
awk 程序通常由:BEGIN語句塊、能夠使用模式匹配的通用語句塊、 END語句塊,共3部分組成
program通常是被單引號或雙引號中
基本格式
awk [options] ‘program’ file…
options
-F 指明輸入時用到的字段分隔符
-v var=value:自定義變量
program包括pattern{actions;…}
pattern部分指定語句的觸發條件
BEGIN,END
actions指明對數據進行的處理操作
print,printf
分割符、域、記錄
由分割符分割的字段(域)標記$1、$2…稱為域標識,$0為所有域
文件的每一行稱為記錄
省略action,默認執行print $0操作
工作原理
1、執行BEGIN語句塊中的語句,可選,進行如變量初始化、打印表頭等操作
2、從文件或標準輸入讀取一行然后執行pattern{action;…}語句塊,重復執行該操作直到文件最后一行??蛇x,沒有提供pattern語句則默認執行{print}打印讀取到的每一行
3、文件讀取完畢后,執行END{action;…}語句塊,可選,進行如打印所有行的分析結果的匯總信息等
print
print item1,item2…
,分隔符
輸出的各item可以為字符串、數值、當前記錄的字段、變量、awk表達式
省略item默認打印$0
變量
分為內置和自定義變量
內置變量
FS:輸入字段分隔符,默認為空白字符
OFS:輸出字段分隔符,默認為空白字符
RS:輸入記錄分隔符,指定輸入時的換行符
ORS:輸出記錄分隔符,輸出時用指定符號代替換行符
NF:字段數量
NR:記錄號
FNR:各文件分別計數
FILENAME:當前文件名
ARGC:命令行參數個數,awk命令自己也是參數
ARGV:屬組,保存命令行各參數
自定義變量
-v var=value
在program中直接定義
printf:格式化輸出
printf “FORMAT”,item1,item2…
必須指定FORMAT
不自動換行,需顯式指定\n
FORMAT中的格式符和各item一一對應
格式符
%c: 顯示字符的ASCII碼
%d, %i: 顯示十進制整數
%e, %E:顯示科學計數法數值
%f:顯示為浮點數
%g, %G:以科學計數法或浮點形式顯示數值
%s:顯示字符串
%u:無符號整數
%%: 顯示%自身
修飾符
m[.n]:m指定顯示的寬度,n指定小數點后的精度
-:左對齊
+:顯示數值的正負符號
操作符
算數操作符
x+y, x-y, x*y, x/y, x^y, x%y
-x: 轉換為負數
+x: 轉換為數值
字符串操作符:沒有符號的操作符,字符串連接
賦值操作符
=, +=, -=, *=, /=, %=, ^=
++, —
比較操作符
==, !=, >, >=, <, <=
模式操作符
~:左邊是否和右邊匹配
!~:是否不匹配
邏輯操作符
&&、||、!
函數調用
function_name(argu1, argu2, …)
條件表達式
selector?if-true-expression:if-false-expression
awk -F: ‘{$3>=1000?usertype=”Common User”:usertype=”Sysadmin or SysUser”;printf “%15s:%-s\n”,$1,usertype}’ /etc/passwd
PATTERN
根據pattern條件過濾匹配的行,再做處理
未指定:空模式,匹配每一行
/正則表達式/
awk ‘/^UUID/{print $1}’ /etc/fstab
關系表達式,結果為真才會處理
真:非0,非空字符串
假:0,空字符串
awk -F: ‘$NF==”/bin/bash”{print $1,$NF}’ /etc/passwd
行范圍
startline,endline:不支持直接給出數字格式
awk -F: ‘/^root\>/,/^nobody\>/{print $1}’ /etc/passwd
BEGIN、END
BEGIN{}:僅在開始處理文件中的文本之前執行一次
END{}:僅在文本處理完之后執行一次
awk -F: ‘BEGIN{print ” USER UID \n————— “}{print $1,$3}’END{print “==============”} /etc/passwd
action
常用分類
Expressions:算術,比較表達式等
Control statements:if, while等
Compound statements:組合語句
input statements
output statements:print等
控制語句
{ statements;… } 組合語句
if(condition) {statements;…}
if(condition) {statements;…} else {statements;…}
對awk取得的整行或某個字段做條件判斷
awk -F: ‘{if($3>=1000) printf “Common user: %s\n”,$1;else printf “root or Sysuser: %s\n”,$1}’ /etc/passwd
while(conditon) {statments;…}
對一行內的多個字段逐一類似處理時使用
對數組中的各元素逐一處理時使用
awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>=10){print $i,length($i)}; i++}}’ /etc/grub2.cfg
do {statements;…} while(condition)
不論真假,至少執行一次循環體
awk ‘BEGIN{ total=0;i=0;do{ total+=i;i++;}while(i<=100);print total}’
for(expr1;expr2;expr3) {statements;…}
awk ‘BEGIN{sum=0;for(i=1;i<=100;i++){sum+=i};print sum}’
awk ‘BEGIN{sum=0;i=1;while(i<=100){sum+=i;i++};print “sum=”sum” i=”i}’
for(variable assignment;condition;iteration process)
{for-body}
for(var in array) {for-body}:遍歷屬組元素
awk ‘/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}’ /etc/grub2.cfg
awk ‘{ips[$1]++}END{for(ip in ips){print ip,ips[ip]}}’ /var/log/httpd/access_log
break:結束所有循環
continue:結束本次循環,執行下一次循環
next:提前結束本次處理而直接進入下一次處理
awk -F: ‘{if($3%2!=0) next; print $1,$3}’ /etc/passwd
delete array[index]
delete array
exit
vim
打開文件
+N:打開文件后,光標處于第N行首
+/PATTERN:打開文件后,光標處于模式匹配到的第一行行首
-b:二進制方式打開文件
-d file… :比較多個文件
ex file或vim -e: 直接進入ex模式
vim三種模式
命令模式:默認,光標移動,剪切、粘貼文本
插入模式:編輯文本
末行模式:內置的命令行接口,保存、退出等
ESC退出當前模式
模式轉換
命令模式–>插入模式
i:insert,在光標所在位置插入
I:在光標所在行首插入
a:append,在光標后面插入
A:在光標所在行尾插入
o:在光標所在行的下面新建一行插入
O:在光標所在行的上面新建一行插入
插入模式–>命令模式
ESC
命令模式–>末行模式
:
末行模式–命令模式
ESC
關閉文件
末行模式
:q
:q!
:wq
:x
命令模式
ZZ:保存退出
ZQ:不保存退出
命令模式
光標跳轉
字符間:h、j、k、l,在命令前加數字可指定跳轉的字符數
單詞間
w:下一單詞詞首
e:當前或下一單詞詞尾
b:當前或下一單詞詞首
在命令前加數字可指定跳轉的單詞數
當前頁
H:頁首
M:中間行
L:頁底
行首尾
^:行首第一個非空白字符
0:行首
$:行尾
行間
nG:第n行
G:最后一行
1G、gg:第一行
句間
(:上一句
):下一句
段落間
{:上一段
}:下一段
編輯操作
字符編輯
x:刪除光標處字符,#x指定從光標處開始的字符數
xp:交換光標處和后一位字符的位置
~:轉換大小寫
J:刪除當前行后的換行符
字符替換
r:替換光標處的字符
R:切換為”替換”模式
刪除
d:結合跳轉字符,實現指定范圍刪除
d$、d^、d0、dw、de、db
#CMD
dd:刪除光標所在行,#dd刪除多行
D:光標處刪除至行尾,留空行
復制
y:結合跳轉字符,實現指定范圍復制
y$、y^、y0、yw、ye、yb
#CMD
yy:光標所在處整行復制,#yy復制多行
Y:整行復制
粘貼
p:若緩存區為整行,則粘貼到下一行;否則粘貼至光標后面
P:若緩存區為整行,則粘貼到上一行;否則粘貼至光標前面
修改
c:結合跳轉字符,實現指定范圍修改
c$、c^、c0、cw、ce、cb
#CMD
cc:刪除當前行并輸入新內容,#cc
C:刪除光標到行尾并插入
撤銷更改
u:最近一次更改,#n最近#次
U:光標落在該行后的所有更改
Ctrl-r:重做最后的撤銷
.:重復前一操作
#.:重復前一操作#次
可視化操作
選擇文本塊
v:字符
V:行
Ctrl-v:塊
結合字符跳轉鍵使用
突出顯示的文字可執行刪除、復制、變更、過濾、搜索、替換等
末行模式
命令提示符為:
可用命令
w
wq
x
q
q!
r filename
w filename
!CMD:執行命令
r!CMD:讀入命令的輸出
地址定界
:start,end
#:第#行
m,n:m-n行
m,+n:m行和其后n行
.:當前行
$:最后一行
%:全文
/PAT1/,/PAT2/:PAT1到PAT2第一次匹配
#,/PAT/
/PAT/,#
使用方式:后跟編輯命令
d
y
w filename:指定范圍另存到指定文件中
r filename:在指定范圍出入指定文件中的內容
查找
/PAT:從光標處向文件尾部查找
?PAT:從光標處向文件首部查找
n:和命令同向
N:和命令反向
查找并替換
s/要查找的內容/替換為的內容/修飾符
要查找的內容:可用模式匹配
替換為的內容:不能使用模式,可使用\1、\2等后向引用,&引用前面查找到的整個內容
修飾符
i:忽略大小寫
g:全局替換,默認只替換每行第一次匹配
gc:全局替換,替換前詢問
分隔符/可使用其他字符
多個窗口
多文件分割
vim -o|O file1 file2
-o:水平分割
-O:垂直分割
窗口間切換:Ctrl-w,方向鍵
單文件分割
Ctrl-w,s:水平
Ctrl-w,v:垂直
Ctrl-w,q:取消相鄰窗口
Ctrl-w,o:取消所有窗口
:wqall:退出
定制工作特性
配置文件
全局:/etc/vimrc
個人:~/.vimrc
末行模式:對當前vim進程有效
常用配置
行號
顯示:set nu
不顯示:set nonu
忽略字符大小寫
忽略:set ic
不忽略:set noic
自動縮進
啟用:set ai
禁用:set noai
智能縮進
啟用:set si
禁用:set nosi
高亮搜索
啟用:set hlsearch
禁用:set nohlsearch
語法高亮
啟用:syntax on
禁用:syntax off
顯示Tab和換行符
啟用:set list
禁用:set nolist
文件格式
啟用windows格式:set ff=dos
啟用unix格式:set ff=unix
設置文本寬度
啟用:set textwidth=65
禁用:set wrapmargin=15
設置光標所在行標識線
啟用:set cul
禁用:set nocul
復制保留格式
啟用:set paste
禁用:set nopaste
設置Tab為4個空格
set?ts=4
set?expandtab
set?autoindent
原創文章,作者:ZBD20,如若轉載,請注明出處:http://www.www58058.com/92545