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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM