0411 第十二次課:三劍客-sed、awk

sed命令

1、sed命令

  • sed簡介編程

    sed命令主要用於刪除、查找替換編程語言

  • sed的用法:命令行

    sed命令模式:sed [option] 'sed命令' filename
    
    sed腳本模式:sed [option] 'sed script' filename
  • sed選項:3d

    -n:只打印匹配到行code

    -e:直接在命令行進行編輯,此爲默認的選項blog

    -f: 執行指定腳本中的script語句排序

    -i:直接修改文件中的內容ip

  • sed動做說明字符串

    a:a的後面能夠是字符串,這些字符串會新增到下一行(目前的下一行)數學

    c:取代,c的後面能夠是字符串,這些字符串能夠取代n1,n2之間的行

    d:刪除

    i:插入,i的後面能夠是字符串,這些字符串會在新的一行出現(目前的上一行)

    p:打印,一般p和 -n一塊兒使用

    s:替換,進行替換,一般s是搭配正則,例如:s/oo/tt/g(把oo替換爲tt)

  • 示例:

    一、使用sed進行匹配

    sed -n '/root/'p passwd

    二、sed不區分大小寫匹配

    sed -n '/root/'Ip passwd

    三、刪除1-30(並不會操做文件)

    sed '1,30'd passwd |wc -l

    四、把第1-5行替換爲「111」

    sed '1,5'c'111' passwd

    五、指定行數替換

    sed '1,10s/oo/xx/g' passwd

    六、全局替換

    sed '$s/oo/xx/g' passwd

    七、把passwd文本以:分割,把第一段和最後一段進行替換

    以第一行爲例:

    sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' passwd |head -n 1

    解釋:

    -r :使用擴展正則。能夠不使用脫意符

    /([^:]+):(.*):([^:]+)/ 以「:」分割爲三段。

    第一段([^:]+):,不以:開頭,以:結尾,「+」表示一個或多個字符。對應的輸出結果就是:

    第二段(.): (.)貪婪匹配,以「:」結尾。對應的輸出結果是:

    第三段([^:]+) 不以「:」開頭,「+」表示一個或多個字符。對應的輸出結果就是:

    \1表示第一個()內容,\2表示第二個()內容,\3表示第三個內容

    最終的輸出結果:

    八、在某行插入字符

    在第三行插入‘333’

    sed ‘3’i‘333’

2、awk

  • awk簡介

    一、awk是一種編程語言,用於對文本和數據進行處理的。

    二、具備強大的文本格式化能力。

    三、利用命令awk,能夠將一些文本整理成爲咱們想要的樣子。

    四、命令awk是逐行進行處理的。

  • awk示例

    一、指定分隔符進行分割

    awk -F ':' '{print $1}' passwd

    -F : 指定分隔符,若是不指定分隔符默認是以空格或者空白行,做爲分割

    $1 : 表示打印第一段,若是是$2就是打印第二段

    二、多段打印

    awk -F ':' '{print $1,$2,$3}' passwd

    三、打印所有段

    awk -F ':' '{print $0}' passwd

    四、awk匹配

    awk '/oo/' passwd

  • awk正則

    awk可使用正則,而且自帶脫意功能,不須要像grep -E 和sed -r 進行脫意。

    一、匹配包含‘root’或者‘user’的行

    awk '/user|root/' passwd

    二、以‘:’分割,匹配包含‘root’或者‘user’的行,並多段打印

    awk -F ':' '/root|user/ {print $1,$2}' passwd

    三、 awk多個匹配,並進行分割

    awk -F ':' '/root/ {print $1,$2} /user/ {print $1,$2,$3}' passwd

    匹配包含'root'的行,並打印第一第二多段

    匹配包含'user'的行,並打印第一,第二,第三段

  • awk數學運算匹配

    一、匹配第三段等於0的

    能夠不輸入print也會默認打印。

    awk -F ':' '$3==0' passwd

    二、匹配第三段大於1000的並指定打印第三段

    awk -F ':' '$3>=1000 {print $3}' passwd

    注意的是若是數字中使用了""號,會認爲是字符串則會按ascll碼進行排序

    三、&&和||

    匹配第三段大於1000的行,而且第六段是‘/home/test’的行

    awk -F ':' '$3>1000 && $6=="/home/test"' passwd

    匹配第三段大於1000的行,或者第六行等於‘/home/test’

    awk -F ':' '$3>1000 || $6=="/home/test"' passwd

    四、兩個字段進行比較

    匹配第三段小於第四段的行

    awk -F ':' '$3<$4' passwd

  • awk內置變量

    一、輸出分隔符:OFS

    OFS是指定print時用到的分隔符

    awk -F ':' '{OFS="#"} $3>=1000 {print $1,$3}' passwd

    {OFS="#"}就是在print時以‘#’做爲分隔符

    二、NR 顯示行數

    awk -F ':' '{print NR": "$0}' passwd

    NR也能夠用來作判斷條件

    awk -F ':' 'NR>10 {print NR": "$0}' passwd

    三、NF:顯示段數

    awk -F ':' '{print NF": " $0}' passwd

  • awk改變值

    將第一段所有改成root

    awk -F ':' '$1="root"' passwd

    賦值後全部的分割符都沒了,能夠再使用OFS加上:

    awk -F ':' '{OFS=":"} $1="root"' passwd

  • awk求和

    把第三段的數字加起來,並打印

    awk -F ':' '{(tot=tot+$3)};END {print tot}' passwd

    {tot=tot+$3}:意思是把第三段的數字循環相加

相關文章
相關標籤/搜索