linux 運維基礎文本處理

  1. 1抽取文本的工具
    文件內容:less和 cat
    文件截取:head和tail
    按列抽取:cut
    按關鍵字抽取:grep
    linux 運維基礎文本處理

1.2文件查看
文件查看命令:
cat,tac,rev
cat [OPTION]... [FILE]...
-E: 顯示行結束符$
-n: 對顯示出的每一行進行編號
-A:顯示所有控制符
-b:非空行編號
-s:壓縮連續的空行成一行
tac
rev

1.3分頁查看文件內容
more: 分頁查看文件
more [OPTIONS...] FILE...
-d: 顯示翻頁及退出提示
less:一頁一頁地查看文件或STDIN輸出
查看時有用的命令包括:
/文本 搜索 文本
n/N 跳到下一個 或 上一個匹配
less 命令是man命令使用的分頁器

1.4按列抽取文本cut和合並文件paste
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第#個字段
#,#[,#]:離散的多個字段,例如1,3,6
#-#:連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定輸出分隔符

1.5分析文本的工具
文本數據統計:wc
整理文本:sort
比較文件:diff和patch

1.6uniq
uniq命令:從輸入中刪除前後相接的重複的行
uniq [OPTION]... [FILE]...
-c: 顯示每行重複出現的次數
-d: 僅顯示重複過的行
-u: 僅顯示不曾重複的行
注:連續且完全相同方爲重複
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c

2Linux文本處理三劍客
grep:文本過濾(模式:pattern)工具
grep, egrep, fgrep(不支持正則表達式搜索)
sed:stream editor,文本編輯工具
awk:Linux上的實現gawk,文本報告生成器

正則表達式
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
程序支持:grep,sed,awk,vim, less,nginx,varnish等
分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
grep -E, egrep
正則表達式引擎:
採用不同算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)
元字符分類:字符匹配、匹配次數、位置錨定、分組
man 7 regex
字符匹配:
. 匹配任意單個字符
[] 匹配指定範圍內的任意單個字符
[^] 匹配指定範圍外的任意單個字符
[:alnum:] 字母和數字
[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
[:lower:] 小寫字母 [:upper:] 大寫字母
[:blank:] 空白字符(空格和製表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的範圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...)
[:digit:] 十進制數字 [:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
linux 運維基礎文本處理
匹配次數:用在要指定次數的字符後面,用於指定前面的字符要出現的次數

  • 匹配前面的字符任意次,包括0次
    貪婪模式:儘可能長的匹配
    . 任意長度的任意字符
    \? 匹配其前面的字符0或1次
    + 匹配其前面的字符至少1次
    {n} 匹配前面的字符n次
    {m,n} 匹配前面的字符至少m次,至多n次
    {,n} 匹配前面的字符至多n次
    {n,} 匹配前面的字符至少n次
    位置錨定:定位出現的位置
    ^ 行首錨定,用於模式的最左側
    $ 行尾錨定,用於模式的最右側
    ^PATTERN$ 用於模式匹配整行
    ^$ 空行
    ^[[:space:]]
    $ 空白行
    \< 或 \b 詞首錨定,用於單詞模式的左側
    \> 或 \b 詞尾錨定;用於單詞模式的右側
    \<PATTERN\> 匹配整個單詞
    分組:() 將一個或多個字符捆綁在一起,當作一個整體進行處理,如:(root)+
    分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中,這些變量的命名方式爲: \1, \2, \3, ...
    \1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
    示例: (string1+(string2))
    \1 :string1+(string2)

    \2 :string2
    後向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身
    或者:|
    示例:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat
    linux 運維基礎文本處理
    linux 運維基礎文本處理
    linux 運維基礎文本處理
    linux 運維基礎文本處理
    linux 運維基礎文本處理

2 vim
vim:一個模式編輯器
擊鍵行爲是依賴於 vim的 的“模式”
三種主要模式:
命令(Normal)模式:默認模式,移動光標,剪切/粘貼文本
插入(Insert)或編輯模式: 修改文本
擴展命令(extended command )模式: 保存,退出等
Esc鍵 退出當前模式
Esc鍵 Esc鍵 總是返回到命令模式
linux 運維基礎文本處理

3 處理文本的工具sed
用法:
sed [option]... 'script' inputfile...
常用選項:
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 多點編輯
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i.bak: 備份文件並原處編輯
script:
'地址命令'

4 awk語言
基本格式:awk [options] 'program' file…
program:pattern{action statements;..}
pattern和action:
pattern部分決定動作語句何時觸發及觸發事件
BEGIN,END
action statements對數據進行處理,放在{}內指明
print, printf
分割符、域和記錄
awk執行時,由分隔符分隔的字段(域)標記$1,$2..$n稱爲域標識。$0爲所有域,注意:和shell中變量$符含義不同
文件的每一行稱爲記錄
省略action,則默認執行 print $0 的操作
print格式: print item1, item2, ...
要點:
(1) 逗號分隔符
(2) 輸出的各item可以字符串,也可以是數值;當前記錄的字段、變量或awk的表達式
(3) 如省略item,相當於print $0
示例:
awk '{print "hello,awk"}'
awk –F: '{print}' /etc/passwd
awk –F: ‘{print “wang”}’ /etc/passwd
awk –F: ‘{print $1}’ /etc/passwd
awk –F: ‘{print $0}’ /etc/passwd
awk –F: ‘{print $1”\t”$3}’ /etc/passwd
tail –3 /etc/fstab |awk ‘{print $2,$4}’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章