1. 程式人生 > >Linux 命令總結(二)

Linux 命令總結(二)

查找 對數 ddr tin 表達 正則表達式 系統環境 pass 分隔

一、正則表達式

grep:顯示匹配行

  • -v:反顯示
  • -e:使用擴展正則表達式 grep -E “ ” xxx.txt 用來省去 擴展需要輸入的

匹配操作符

  • ? 轉義字符
  • . 匹配任意單個字符
  • [1249a],[ ^ 12 ],[ a - k ] 字符序列單字符占位
  • ^ 行首
  • $ 行尾
  • ?<, ?> 單詞首尾邊界
  • | 連接操作符
  • (,) 選擇操作符
  • \n 反向引用

重復操作符

  • ?匹配0到1次。
  • *匹配0到多次。
  • +匹配1到多次。
  • {n} 匹配n次。
  • {n,} 匹配n到多次。
  • {n,m} 匹配n到m次。

與擴展正則表達式的區別:grep basic

?, ?+, ?{, ?|, ?(, and ?)

匹配任意字符

.*

示例

創建文件 grep.txt ,文件內容如下:

ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx
$ooxx
oo1234xx
ooxyzxx

技術分享圖片

示例2:

創建test文件,文件內容如下:

aaabbcaaa
aa bbc aaa
bb bbc bbb
asgodssgoodsssagodssgood
asgodssgoodsssagoodssgod
sdlkjflskdjf3slkdjfdksl
slkdjf2lskdjfkldsjl

接下來查看下列輸出匹配各是什麽結果:

cat test

  • grep "a" test
  • grep "a{3}" test
  • grep "<aaa" test
  • grep "<aaa>" test
  • grep "b" test
  • grep "b{2,3}" test
  • grep "god" test
  • grep "godgood" test
  • grep "god*good" test
  • grep "god.*good" test
  • grep "god.* good.* god.*good" test
  • grep "god.*good+" test
  • grep " ?(god.*good ?)+" test
  • grep "?(god?).* good.*\1" test
  • grep "?(god ?).* ?(good ?).* \1.*\2" test 反向引用的例子
  • grep "?(god ?).* ?(good ?).* \1.*\2" test
  • grep "?(god?).* ?(good ?).* \2.* \1" test

二、文本分析處理

cut:顯示切割的行數據

  • -f:選擇顯示的列
  • -s:不顯示沒有分隔符的行
  • -d:自定義分隔符

示例:

技術分享圖片

sort:排序文件的行

  • -n:按數值排序
  • -r:倒序
  • -t:自定義分隔符
  • -k:選擇排序列
  • -u:合並相同行
  • -f:忽略大小寫

示例:

技術分享圖片

wc:文本統計

技術分享圖片

sed:行編輯器

說明sed的語法是:sed [options(參數)] ‘Address(地址)Command(命令)‘ file(文件) ...

sed:行編輯器options

  • -n: 靜默模式,不再默認顯示模式空間中的內容
  • -i: 直接修改原文件
  • -e SCRIPT -e SCRIPT:可以同時執行多個腳本
  • -f /PATH/TO/SED_SCRIPT
  • -r: 表示使用擴展正則表達式

sed:行編輯器Command

  • -d: 刪除符合條件的行;
  • -p: 顯示符合條件的行;
  • -a \string: 在指定的行後面追加新行,內容為string
    • \n:可以用於換行
  • -i \string: 在指定的行前面添加新行,內容為string
  • -r FILE: 將指定的文件的內容添加至符合條件的行處
  • -w FILE: 將地址指定的範圍內的行另存至指定的文件中;
  • -s/pattern/string/修飾符: 查找並替換,默認只替換每行中第一次被模式匹配到的字符串
  • -g: 行內全局替換
  • -i: 忽略字符大小寫
  • -s///: s###, [email protected]@@
    • ?(?), \1, \2

sed:行編輯器Address

  • 可以沒有
  • 給定範圍 如 : 第幾行 1,2,3
  • 查找指定行 如:/str/

簡單示例:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

實用示例:修改inittab文件:

技術分享圖片

我們通過sed ‘s/\(id:\)[0-6]\(:initdefault:\)/\15\2/ig‘ inittab將3設置為5,結果如下:

技術分享圖片

實用示例:修改ip:

sed "s/\(IPADDR=\(\<2[0-5][0-5]\|\<2[0-4][0-9]\|\<1\?[0-9][0-9]\?\.\)\{3\}\).*/\188/" ifcfg-eth0將IP地址末尾改為188

awk 文本分析工具(重要)

  • awk是一個強大的文本分析工具。
  • 相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。
  • 簡單來說awk就是把文件逐行的讀入,(空格,制表符)為默認分隔符將每行切片,切開的部分再進行各種分析處理。

awk語法: awk -F ‘{pattern(模式匹配) + action(動作)}‘ {filenames(文件名稱)}

  • 支持自定義分隔符
  • 支持正則表達式匹配
  • 支持自定義變量,數組 a[1] 、 a[tom] == map(key) 這裏的數組可以相當於map
  • 支持內置變量
    • ARGC 命令行參數個數
    • ARGV 命令行參數排列
    • ENVIRON 支持隊列中系統環境變量的使用
    • FILENAME awk瀏覽的文件名
    • FNR 瀏覽文件的記錄數
    • FS 設置輸入域分隔符,等價於命令行 -F選項
    • NF 瀏覽記錄的域的個數
    • NR 已讀的記錄數
    • OFS 輸出域分隔符
    • ORS 輸出記錄分隔符
    • RS 控制記錄分隔符
  • 支持函數
    • print、split、substr、sub、gsub
  • 支持流程控制語句,類C語言
    • if、while、do/while、for、break、continue

示例,查找passwd文件:

技術分享圖片

  • 只是顯示/etc/passwd的賬戶:CUT
    • awk -F‘:‘ ‘{print $1}‘ passwd
      技術分享圖片
  • 只是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以逗號分割,而且在所有行開始前添加列名name,shell,在最後一行添加"blue,/bin/nosh"(cut,sed)
    • awk -F‘:‘ ‘BEGIN{print "name,shell"} {print $1 "," $7} END{print "blue,/bin/nosh"}‘ passwd
      技術分享圖片
  • 搜索/etc/passwd有root關鍵字的所有行
    • awk ‘/root/ { print $0}‘ passwd
      技術分享圖片
  • 統計/etc/passwd文件中,每行的行號(NR),每行的列數(NF),對應的完整行內容
    技術分享圖片

示例,統計報表:合計每人1月工資,0:manager,1:worker:

創建文件awk.txt

技術分享圖片

執行命令:awk ‘{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5;if($2=="0"){role[$1]="M"}else{role[$1]="W"}}} END{for(i in name){print i "\t" name[i]"\t" role[i]}}‘ awk.txt

結果:

技術分享圖片

也可以將命令寫入文件,然後讀取文件執行命令:

技術分享圖片

Linux 命令總結(二)