linux`操做文本的三大利器

awkgrepsedlinux操做文本的三大利器,也是必須掌握的linux命令之一。三者的功能都是處理文本,但側重點各不相同,其中屬awk功能最強大,但也最複雜。grep更適合單純的查找或匹配文本,sed更適合編輯匹配到的文本,awk更適合格式化文本,對文本進行較複雜格式處理。linux

如下全部實驗輸出,均以測試文件test.log內容爲基準:正則表達式

20170102 admin,password Open
20170801 nmask,nmask close
20180902 nm4k,test filter

awk

AWK是一種處理文本文件的語言,是一個強大的文本分析工具; awk是以列爲劃分計數的,$0表示全部列,$1表示第一列,$2表示第二列。函數

awk參數

  • -F 指定輸入文件折分隔符,如-F:
  • -v 賦值一個用戶定義變量,如-va=1
  • -f 從腳本文件中讀取awk命令

注:只列舉最經常使用的參數工具

分隔符

每行按空格分割列,並輸出第一、3列測試

$ awk '{print $1,$3}' test.log
# 或者
$ cat test.log | awk '{print $1,$3}'

自定義分隔符

使用」,」進行分割,參數用-F3d

awk -F, '{print $1,$2}' test.log

使用多個分隔符,先使用空格分割,而後對分割結果再使用」,」分割code

$ awk -F '[ ,]'  '{print $1,$2,$3}'  test.log  #注意逗號前面有一個空格

設置變量

設置awk自定義變量,用參數-v遞歸

例子:設置變量a爲1ip

cat test.log | awk -v a=1 '{print $1,$1+a}'

注意:-v a之間要空格。字符串

字符串拼接:(用」」而不是+)

cat test.log | awk -v a=\" '{print a""$0""a}'

邏輯判斷

輸出第一列爲20170801的記錄

cat test.log | awk '$1==20170801 {print}'

輸出第二列不是nmask,nmask的記錄

cat test.log | awk '$2!="nmask,nmask" {print}'

內建變量

NR參數:輸出行號

cat test.log | awk '{print NR,$1,$2,$3}'

正則表達式

輸出第二列中包含nm開頭的全部記錄

cat test.log | awk '$2 ~ /nm.*/ {print}'

輸出包含2017開頭的記錄

cat test.log | awk '/2017.*/ {print}'

注意:這裏沒有~,由於沒有指定是哪一列

忽略大小寫{INGORECASE=1}

cat test.log | awk '{INGORECASE=1} /nmask/ {print}'

匹配取反 !~

cat test.log | awk '$2 !~ /nmask/ {print}'

內置函數

substr字符串截取

截取第一列的第一到第四個字符

cat test.log | awk '{print substr($1,1,4)}'

split切分字符串

以逗號分隔第2列的數據,並輸出分別輸出第2列的內容

cat test.log | awk '{split($2,a,",");print a[1],a[2]}'

gsub替換

將第2列中的nmask替換成nMask

cat test.log | awk '{gsub("nmask","nMask",$2);print}'

grep

Linux grep命令用於查找文件裏符合條件的字符串。

Usage

遞歸查詢

grep -r nmask /etc/  #查看/etc目錄下內容包含nmask的文件

查詢取反

grep -v test test.log

sed

Linux sed命令是利用script來處理文本文件。

參數

  • -e 以選項中指定的script來處理輸入的文本文件。
  • -f 以選項中指定的script文件來處理輸入的文本文件。
  • -h 顯示幫助。
  • -n 僅顯示script處理後的結果。
  • -V 顯示版本信息。

動做

  • a :新增, a 的後面能夠接字串,而這些字串會在下一行出現
  • i :插入, i 的後面能夠接字串,而這些字串會在上一行出現
  • c :取代, c 的後面能夠接字串,這些字串能夠取代 n1,n2 之間的行
  • d :刪除
  • s :取代,一般這個s的動做能夠搭配正規表示法!如 s/old/new/g

插入操做

在test.log文件的第3行後插入一行,內容爲nmask

sed -e 3a\nmask test.log

刪除操做

刪除test.log的第2行、第3行數據

cat test.log | sed '2,3d'

匹配刪除,刪除行中有nmask字符串的

nl test.log | sed '/nmask/d'

替換操做

sed 's/要被取代的字串/新的字串/g'
相關文章
相關標籤/搜索