【Shell】grep sed awk

grep [options]  PATTERN

  • -i:忽略大小寫
  • --color:匹配到的字符用其他顏色顯示出來
  • -v:顯示沒有匹配到的行
  • -o:只顯示被模式匹配到的字符串,不顯示行
  • -A n:顯示該行及其後n行
  • -B n:顯示該行及其前n行
  • -C n:顯示該行及其前後各n行


sed 用來把文檔或字符串裏的文字經過一系列編輯命令轉換爲另一種格式輸出

sed [-nefr] ‘行數 動作 文件

  • -n:靜默歐式,不再顯示空間中的內容
  • -i:直接修改源文件
  • -e SCRIPT:執行腳本
  • -r:使用擴展正則表達式

  • startline,endline:開始行,結束行
  • /RegExp/:擴展正則表達式
  • /pattern1/,/pattern2/:從第一次匹配parttern1行開始,到第一次匹配到pattern2行結束
  • linenumber
  • startline,+N:從startline開始,向後N行結束

  • p:顯示符合條件的行(不適用-n被匹配到的行會顯示兩遍,sed會把處理的信息輸出)
  • a xxx:新增,在指定的行後面追加新行,內容爲“xxx”(下一行)
  • c xxx:替換,在c後面可以接字符串
  • d:刪除,刪除符合條件的行
  • i  xxx:插入,在指定的行前面追加新行,內容爲“xxx”(上一行)
  • r  file:將指定的文件內容添加到符合條件的文件中
  • w file:將地址指定範圍的行另存至指定的文件中
  • s /被替換字符/替換字符/[i/g]:查找並替換,默認只替換每行中第一次被模式匹配到的字符

g:全局替換     i:忽略字符大小寫

# Read from the file file.txt and output the tenth line to stdout.
cat file.txt | sed -n '10p'
nl wc.txt | sed '2i zhang'

nl wc.txt | sed '2s/hello/bonjour/i'

 


awk提供了強大的功能:正則表達式、樣式裝入、流控制、數學運算符、進程控制語句、內置變量函數。

 

awk [options] 'script' file1,file2,......

awk [options] 'PATTERN{action}' file1,file2,......

awk內置記錄變量

  • FS字段分隔符,默認是空白字符
  • RS:記錄分隔符,默認是換行符
  • OPF:字段分隔符
  • OPS行分隔符

awk 'BEGIN{OFS=","}{print $1,$2}' wc.txt

awk內置數據變量

  • NRawk命令所處理的記錄行數(可能有多個)
  • NF:當前記錄的字段數
  • FNR:當前處理文件的行數
  • ARGV:數組,保存命令行本身的字符串
  • ARGC:awk命令的參數個數
  • FILENAME:正在處理的文件名稱
  • ENVIRON:當前shell環境變量及其關聯數組

awk 'BEGIN{print ENVIRON["PATH"]}'

 

print

print item1,item2,......
  1. 各項目使用逗號隔開,輸出時以空白字符分隔
  2. 輸出可以爲字符串、數值、當前記錄的字段、變量、或awk表達式
  3. item可以忽略,相當於print $0

printf

printf format item1,item2,......

與print不同,printf需要指定格式(item輸出格式)

格式:

  • %c:字符的ASCII碼
  • %d,%i:十進制整數
  • %e,%E:科學計數法顯示數值
  • %f:顯示浮點數
  • %g,%G:以科學計數法格式或浮點數格式顯示數值
  • %s:顯示字符串
  • %u:無符號整數
  • %%:顯示%自身

awk處理流程:

(1) 讀入第一行,並將第一行的數據填入到$0,$1,$2等變量當中

(2) 依據條件類型限制,判斷是否需要進行後面的操作

(3) 做完所有動作和條件類型

(4) 繼續後續行的處理......

每一行的每個變量都是有變量名稱的,$1,$2,$3......($1表示第一列,$0表示一整行)

 

last -n 5 | awk '{print $1,$3}'

 

last -n 5 | awk '{print $1,NR,NF}'

 

--------------------------------------------------------------------------------------------------------

字符串統計:

cat wc.txt |  
sed 's/[,.:;/!?]/ /g' |  
awk '{for(i=1;i<NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}'

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