Linux基礎三劍客

一、grep:文本搜索工具

        -c    只輸出匹配的行數

        -i     不區分大小寫

        -v    過濾掉包含指定字符串的行

        -s    不顯示不存在或無匹配的文本的錯誤信息

        -w    只顯示匹配的整個單詞,而不是字符串的一部分

        -n    顯示匹配行及行號

        -l      只列出匹配的文件名

        -L     列出不匹配的文件名

            例:

          grep -c root  /etc/passwd    如果包含root字符串在文件中有兩行,顯示爲2

            grep -i root /etc/passwd       顯示出root字符串的行,包含其大小寫

             grep -v root /etc/passwd      顯示除含有root字符串的行

             grep ‘test’ d*            顯示所有以d開頭的文件中包含test字符串的行

          grep '^$' /etc/passwd    顯示passwd文件中的空行

          grep 'test'  aa bb cc        顯示在aa,bb,cc文件中匹配test的行

        正則表達式的主要參數:

                    \        忽略正則表達式中特殊字符的原有含義

                    []        單個字符,如[a]即[a]符合要求

                    [-]        範圍,如[a-z],即a,b,c一直到z都符合要求

                        grep '[a-z]\{5\}' aa    顯示所有包含每個字符串至少有5個連續小寫字符的字符串的行,a-z都可以

                        grep 'w\(es\)t.*\1' aa    如果west被匹配,則es被存儲到內存中,並標記爲1,然後搜索任意個字符(.*), 這些字符後面緊跟着另外一個es(\1),找到就顯示該行。例:west.es  west.esdd.es west.aa.es

                        grep test /mnt/*        目錄下搜索帶字符串test的文件

                        grep -l test /mnt/*        只列出匹配的文件名

                        grep -L test /mnt/*        列出不匹配的文件名

          [[:alpha:]]        單個字母

          [[:lower:]]        單個小寫字母

          [[:upper:]]        單個大寫字母

          [[:alnum:]]        單個字母或數字

          [[:punct:]]        單個符號,不包含數字,字母以及空格

          [[:digit:]]            數字

          [[:space:]]        空格

                例:grep '5[[:upper:]][[:upper:]]' aa        顯示以5開頭以兩個大寫字母結尾的行

二、sed:文本處理工具

        -u        展示修改後的文本內容,但不是真的改

        -i          直接修改文件,不顯示內容

        sed '1d' file        刪除第一行

        sed '2,$d' file           刪除第二行到最後一行

        sed '1a play lol' file     第一行後面增加字符串"play lol"

        sed '5i go die' file        在第5行前添加"go die"

        sed '1c Hi' file        第一行代替爲Hi

        sed -n 2,'$'p file        顯示第二行到最後一行

        sed 's/^.*asd.*$/lizekang/g' file    匹配asd字符,並修改整行爲lizekang

        sed '14c [file]' file        修改14行整行爲[file]

        sed -n '/^\//p' file        顯示以/開頭的行(如果沒有-n選項,則顯示file中的所有內容和/開頭的行兩份,-n模式將其他行過濾掉,只顯示/開頭的行)

        sed '/^$/d' fiel        刪除文件中的空白行

        sed '/^#/d' file         刪除文件開頭的#號

        sed 's/^[[:spqce:]]*//g' fiel        刪除文件行首的空格


三、awk:文本分析工具

        -F(分割詞):不添加此參數默認以空格分割。

        '{print $1}' :必要字段,輸出具體第幾段,$NF表示最後一個元素。

        awk '{print NR,$0}' 在每行前面加上行號。

        awk '{if (NR<=3+1 && NR>=2) print $0}' 輸出第二行到第四行。

        netstat -an|awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'

            /^tcp/  濾出tcp開頭的記錄,屏蔽udp,socket等無關記錄。

            state[]   相當於定義一個叫state的數組

            NF        表示記錄的字段數         

            state[$NF]   表示數組元素的值,如上就是state[TIME_WAIT]的連接數

            ++state[$NF]    上面的連接數加1

            下面是awk的一些練習:

                1. 用awk 打印整個test.txt (以下操作都是用awk工具實現,針對test.txt);

                        awk '{print $0}' test.txt

                2. 查找所有包含’bash’的行;

                        awk '/bash/' test.txt

                3. 用’:’作爲分隔符,查找第三段等於0的行;

                        awk -F ':' '$3=="0"' test.txt

                4. 用’:’作爲分隔符,查找第一段爲’root’的行,並把該段的’root’換成’toor’(可以連同sed一起使用);

                        awk -F ':' '$1=="root"' test.txt | sed 's/root/root/g'

                5. 用’:’作爲分隔符,打印最後一段;

                        awk -F ':' '{print $NF}' text.txt

                6. 打印行數大於20的所有行;

                        awk -F ':' 'NR>20' test.txt

                7. 用’:’作爲分隔符,打印所有第三段小於第四段的行;

                        awk -F ':' '$3<$4' test.txt

                8. 用’:’作爲分隔符,打印第一段以及最後一段,並且中間用’@’連接 (例如,第一行應該是這樣的形式 “root@/bin/bash”;

                        awk -F ':' '{print $1"@"$NF}' test.txt

                9. 用’:’作爲分隔符,把整個文檔的第四段相加,求和;

                        awk -F ':' '{(sum+=$4)}; END {print sum}' test.txt



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