sed正則表達式
sed是一種非交互式的流編輯器,可動態編輯文件。所謂的非交互式是說,sed和傳統的文本編輯器不一樣,並不是和使用者直接互動,sed處理的對象是文件的數據流。sed的工做模式是,比對每一行數據,若符合樣式,就執行指定的操做。編輯器
經常使用的sed命令:工具
選項與參數:
-n :使用安靜(silent)模式。在通常 sed 的用法中,全部來自 STDIN 的數據通常都會被列出到終端上。但若是加上 -n 參數後,則只有通過sed 特殊處理的那一行(或者動做)纔會被列出來。
-e :直接在命令列模式上進行 sed 的動做編輯;
-f :直接將 sed 的動做寫在一個文件內, -f filename 則能夠運行 filename 內的 sed 動做;
-r :sed 的動做支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法)
-i :直接修改讀取的文件內容,而不是輸出到終端。命令行
function:
a :新增, a 的後面能夠接字串,而這些字串會在新的一行出現(目前的下一行)~
c :取代, c 的後面能夠接字串,這些字串能夠取代 n1,n2 之間的行!
d :刪除,由於是刪除啊,因此 d 後面一般不接任何咚咚;
i :插入, i 的後面能夠接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的數據印出。一般 p 會與參數 sed -n 一塊兒運行~
s :取代,能夠直接進行取代的工做哩!一般這個 s 的動做能夠搭配正規表示法!例如 1,20s/old/new/g 就是啦!code
sed '1,4d' 1.log //刪除1到4行數據,剩下的顯示出來。d是sed的刪除命令。這裏的刪除並非修改了源文件 sed '$d' 1.log //刪除最後一行 sed '/LA/d' 1.log //刪除匹配到包含'LA'字符行的數據,剩下的顯示。//表明搜索 sed '/[0-9]\{3\}/d' 1.log //刪除包含三位數字的行,注意{3}個數指定的大括號轉義 sed '/LA/!d' 1.log // 反選 ,把不含LA行的數據刪除 sed '/^$/d' 1.log //刪除空白行 //若是想顯示匹配到的呢? sed '/a/p' 1.log //因爲默認sed也會顯示不符合的數據行,因此要用-n,抑制這個操做 sed -n '/a/p' 1.log //替換字符,把a替換成A sed -n 's/a/A/p' 1.log //s是替換的命令,第一個//中的字符是搜索目標(a),第二個//是要替換的字符A //上面的只會替換匹配到的第一個,若是我想全部替換呢 sed -n 's/a/A/gp' 1.log // g 全局替換 sed -n 's/a//gp' 1.log //刪除全部的a sed -n 's/^...//gp' 1.log //刪除每行的前三個字符 sed -n 's/...$//gp' 1.log //刪除每行結尾的三個字符 sed -n 's/\(A\)/\1BC/gp' 1.log // 在A後面追加BC,\1表示搜索裏面括號裏的字符 sed -n '/AAA/s/234/567/p' 1.log //找到包含字符AAA這一行,並把其中的234替換成567 sed -n '/AAA/,/BBB/s/234/567/p' 1.log //找到包含字符AAA或者BBB的行,並把其中的234替換成567 sed -n '1,4s/234/567/p' 1.log //將1到4行中的234.替換成567 cat 1.log | sed -e '3,$d' -e 's/A/a/g' //刪除3行之後的數據,並把剩餘的數據替換A爲a sed -i '1d' 1.log //直接修改文件,刪除第一行 sed -i '2i 123Abc' 1.log //在第一行和第二行間插入一行123Abc sed -i '2a 123Abc' 1.log //在第二行和第三行間插入一行 123Abc
awk對象
awk是一種能夠處理數據、產生格式化報表的語言。awk的工做方式是讀取數據文件,將每一行數據視爲一條記錄,每條記錄以分隔符分紅若干字段,而後輸出。隊列
awk的平常用法:進程
awk經常使用的格式:字符串
1. awk '樣式' 文件,把符合樣式的數據顯示出來。io
2. awk '{操做}' 文件,對每一行都執行{}中的操做。
3. awk '樣式{操做}' 文件,對符合樣式的數據進行括號裏的操做。
awk內置變量
ARGC 命令行參數個數 ARGV 命令行參數排列 ENVIRON 支持隊列中系統環境變量的使用 FILENAME awk瀏覽的文件名 FNR 瀏覽文件的記錄數 FS 設置輸入域分隔符,等價於命令行 -F選項 NF 瀏覽記錄的域的個數 NR 已讀的記錄數 OFS 輸出域分隔符 ORS 輸出記錄分隔符 RS 控制記錄分隔符
ps aux | awk '{print $2}' //獲取全部進程PID awk '/La/' 1.log // 顯示含La的數據行 awk '{print $1, $2}' 1.log //顯示每一行的第1和第2個字段 awk '/La/{print $1, $2}' 1.log //將含有La關鍵詞的數據行的第1以及第2個字段顯示出來 awk -F : '/^root/{print $1, $2}' /etc/passwd awk 'BEGIN {count=0}{count++} END{print count}' /etc/passwd //統計用戶數 //BEGIN後緊跟的操做,在awk命令開始匹配第一行時執行,END後面緊跟的操做在處理完後執行 awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd //顯示全部帳戶 awk -F : 'NR > 1 && NR <=5 {print $1}' /etc/passwd //顯示一到五行
grep
grep文本蒐集工具, 結合正則表達式很是強大。
-c : 只輸出匹配的行
-I : 不區分大小寫
-h : 查詢多文件時不顯示文件名
-l : 查詢多文件時, 只輸出包含匹配字符的文件名
-n : 顯示匹配的行號及行
-v : 顯示不包含匹配文本的全部行(我常常用除去grep自己)
grep經常使用命令
grep 'test' d* //顯示全部以d開頭的文件中包含test的行 grep 'test' aa bb cc //顯示在 aa bb cc 文件中包含test的行 grep '[a-z]\{5}\' aa //顯示全部包含字符串至少有5個連續小寫字母的串