Linux shell文本過濾

正則表達式
--概念:一種用來描述文本模式的特殊語法
--由普通字符(例如:字符a到z),以及特殊字符(元字符,如/*?等)組成匹配的字符串
--文本過濾工具在某種模式之下,都支持正則表達式
--基本元字符集及其含義
    ^    只匹配行首
    $    只匹配行尾
    *    一個單字符後緊跟*,匹配0個或多個此單字符
    []    匹配[]內字符。可使一個單字符,也能夠是字符序列。可使用"-"表示[]內字符序列範圍,如用[1-5]代替[12345]
    \    用來屏蔽一個元字符的特殊含義。由於有時在shell中一些元字符有特殊含義。"\"可使其失去應有意義
    .    匹配任意單字符
    pattern\{n\} 用來匹配pattern出現次數,n爲次數,(這裏的大括號須要轉義,和javascript不一樣)
    pattern\{n,\}    含義同上,但次數最少爲n
    pattern\{n,m\}    含義同上,但pattern出現次數在n與m之間
--特殊:"^$"匹配空行    "^.$"匹配包含一個字符的行
--shell中彷佛沒有javascript中的\S,\w等元字符
xargs
--對於find命令查找的文件列表,想使用grep命令查找指定文件,可是有時候文件太多了,超過了grep命令的上限,就有了可能報錯
--xargs的做用是:find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是所有,
這樣他能夠先處理最早獲取的一部分文件,而後是下一批,並如此繼續下去
--常見用法: find . -name "*" | xargs grep "hostname" --注意:在find和grep中,若是不使用xargs,可能沒法查出正確結果
grep
--功能:按照行方式處理文本
--語法格式:    grep [選項]    基本正則表達式 [文件](沒有文件也能夠來自管道)
--參數
    -n    顯示匹配行及行號
    -v    顯示不包含匹配文本的全部行
--grep中的正則表達式不須要使用//
--例如:grep "^2014&" 1.c  --在1.c文件中查找以2014開頭而且以2014結尾的字符串
awk
--參數
    -F    指定分隔符
--例子①:awk -F ":" '{print $1 "--" $3}' passwd.txt
    詳解:'{print $1 "--" $3}',print $1打印第一列的數據,"--""--"來分割第一列和第三列數據,這裏必須加雙引號
--②:awk -F ":" '$3>499 {print $1 "\t" $3}' passwd
    詳解:$3>499指的是第三列的值大於499的列
--$0表示一行的全部數據
--awk獲取倒數第一個域$(NF-0),倒數第二個域是$(NF-1)
awk多條件判斷
1.awk中的判斷符號和條件測試中的判斷符號是不一樣的,awk中只有"=","!=","<",">"
2.awk中多條件的鏈接符是"&&"(與)和"||"(或)
例如:awk -F "\t" '$2>=2 && $2<=5 {printf $0}' 1.c
--表示篩選第二列中大於等於2而且小於等於5的數據
sort
sort -n -k7
--"-n"按行排序,"-k[n]"按第n列升序排序
sort -n -k7 -r
--降序排列
tail -[n]
--從底下往上取n行
head -[n]
--從上往下取n行
wc -c
--顯示總共有多少字符
wc -l
--顯示總共有多少行
sed
--語法結構    sed options ... [script] ... [inputfile]
--若是沒有輸入文件,則sed默認對標準輸入進行處理(即鍵盤輸入)。腳本命令是第一個不以"-"開始的參數
--經常使用選項
    -n    靜默輸出
    -e    容許多個腳本指令被執行
    -i    直接修改源文件,通過腳本指令處理過的內容將被輸出至源文件(源文件被修改,慎用) --經常使用用法
--按照一個範圍(第幾行到第幾行)。提取數據
--sed的主要用法是編輯功能...對提取的數據,進行修改,替換,編輯,刪除,插入等操做
--sed經過讀取讀取文件內容,但一次僅讀一行內容進行指令操做後輸出,因此sed更適合處理大數據文件。
--sed -n 'p' 文件名
  詳解:打印文件中全部行,包括空行,"p"表示打印行數據
$p表示最後一行;
sed -n '$=' 獲取最後一行的行號 --sed -n '3,/ddd/p' 文件名 詳解:從第三行開始匹配,打印含有ddd的行,、 --sed -n '/^$/=' 文件名 詳解:打印空行的行號,"="表示打印行號,不打印行數據 --sed多條指令的執行方法1 sed -n -e '3p' -e '/^$/=' 1.c 詳解:經過仔細觀察發現,若是第二行是空行,會先打印第二行的行號,再打印第三行, 這是由於sed是一行行的讀取數據的 --sed多條指令執行方法2 sed -n '3p;/^$/=' 1.c 注意用分隔符""分開 --sed腳本操做選項 a(append) 追加 i(insert) 插入 d(delete) 刪除 s(substitution) 替換 --例子: --sed '2a 大較好' 文件名 詳解:向文本第二行後面追加"你們好"字符串(有換行問題) --sed '3i 你們好' 文件名 詳解:向文本第三行前插入"你們好"字符串(有換行問題) --sed 's/匹配原來的字符串正則表達式/向替換的字符/g' 文件名 詳解"s"表示是替換的意思,"g"表示全文的意思 --sed '3,4d' 文件名 詳解:刪除第三行到第四行的數據 --sed 's/hello//g' 文件名 詳解:把全文的hello替換成空字符串--注意:sed語法中,若是須要使用shell變量,那麼不能加"'"單引號,而且變量必須使用${}形式 例如:ipcs | sed -n ${變量1},${變量2}p
相關文章
相關標籤/搜索