sed,awk,grep教程

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個連續小寫字母的串
相關文章
相關標籤/搜索