linux sed awk

sed :
正則表達式

    非交互式的流編輯器,經過多種轉換修改流經他的文本,並將輸出結果打印到屏幕上,但並不改變文件自身,能夠作的編輯動做包括刪除,查找,替換,插入,添加或者從其餘文件中讀取數據。
c#

使用場景:數組

    過於龐大的文本,有規律的文本修改,加快文件處理速度,常規修改困難的文本
bash

語法:編輯器

    sed  [參數]  命令  目錄
ide

工做機制:函數

    每次讀取一行文本至「模式空間」中,在其中完成處理,並將處理 結果輸出至標準輸出設備
工具

經常使用參數:spa

    -r 支持擴展正則表達式語法
命令行

    -n 使用安靜模式,使用後只有通過sed特殊處理的那行纔會被列出來

    -e 直接在指令模式上進行動做編輯

    -f 將sed 的動做寫一個文檔,-f filename 則能夠執行filename內的sed 動做

    -i 直接修改讀取的檔案內容,而不是由屏幕輸出

命令:

        [n1[,n2]] function

n1,n2 :不見得會存在,通常表明‘選擇進行的行數’

命令選項:

    a 新增,能夠接字符串,而字符串會出如今新的下一行中

    c 取代,能夠接字符串,這些字符串能夠取代n1,n2之間的行

    d 刪除

    i 插入,後面接的字符串會在新的上一行出現

    p 打印模式空間的行

    P打印匹配的第一行

    g 全局取代

    s/old/new 用new替換正則表達式old  --通常於g連用

    = 顯示行號

    w /path/to/somefile:把指定的內容另存至/path/to/somefile路徑所指定的文件中;

    r /path/from/somefile:在文件的指定位置插入另外一個文件的全部內容,完成文件合併;

[root@iZ28qzns9m4Z bashtest]# nl passwd |sed 's/user001/usernew001/g'

wKioL1X9cRfQBmjVAAEtvRkxj4g404.jpg

[root@iZ28qzns9m4Z bashtest]# nl passwd |sed '2,5d'
     1	root:x:0:0:root:/root:/bin/bash
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
[root@iZ28qzns9m4Z bashtest]# nl passwd |sed 'p'
     1	root:x:0:0:root:/root:/bin/bash
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@iZ28qzns9m4Z bashtest]# sed -i 's/\:/\#/g' passwd 
[root@iZ28qzns9m4Z bashtest]# cat passwd 
root#x#0#0#root#/root#/bin/bash
bin#x#1#1#bin#/bin#/sbin/nologin
daemon#x#2#2#daemon#/sbin#/sbin/nologin
adm#x#3#4#adm#/var/adm#/sbin/nologin
lp#x#4#7#lp#/var/spool/lpd#/sbin/nologin
sync#x#5#0#sync#/sbin#/bin/sync
shutdown#x#6#0#shutdown#/sbin#/sbin/shutdown
  • 高級命令:

  • h:用模式空間中的內容覆蓋保持空間的內容;

  • H:把模式空間中的內容追加至保持空間中內容的後面;

  • g:從保持空間中取到其內容,並將其覆蓋模式空間中的內容;

  • G:從保持空間中取到其內容,並將其追加在模式空間中的內容的後面;

  • x:把保持空間和模式空間中的進行交換;

  • n:讀取匹配到的行的下一行至模式空間;(會覆蓋模式空間中的原有內容);

  • N:讀取匹配到的行的下一行至模式空間,追加在模式空間中原有內容的後面;

  • d:刪除模式空間中的內容;

  • D:刪除多行模式空間中的首行;

  • 注意:命令功能可以使用!取反;分號可用於分隔腳本;

[root@iZ28qzns9m4Z bashtest]# sed 'G' passwd 
root#x#0#0#root#/root#/bin/bash

bin#x#1#1#bin#/bin#/sbin/nologin

daemon#x#2#2#daemon#/sbin#/sbin/nologin
[root@iZ28qzns9m4Z bashtest]# nl passwd |sed 'n;d' 
     1	root#x#0#0#root#/root#/bin/bash
     3	daemon#x#2#2#daemon#/sbin#/sbin/nologin
     5	lp#x#4#7#lp#/var/spool/lpd#/sbin/nologin
     7	shutdown#x#6#0#shutdown#/sbin#/sbin/shutdown
     9	mail#x#8#12#mail#/var/spool/mail#/sbin/nologin
    11	games#x#12#100#games#/usr/games#/sbin/nologin
    13	nobody#x#99#99#Nobody#/#/sbin/nologin

經常使用正則表達式:

    ^ 匹配行開始

    $ 匹配行的結束

    . 匹配任意非換行字符

    \(..\)保存匹配字符

    x\{n\} 重複字符x,n次

    x\{m,\} 重複字符x,至少m次

AWK:基於列的文本處理工具,他認爲文件時有單詞和空白字符組成

格式:

    awk '條件類型1{動做1} 條件類型2{動做2}' filename

    awk [options] 'program' file file ...

   awk [options] 'PATTERN{action}' file file ...

    要點:

(1) 各項目之間使用逗號分隔,而輸出時則使用輸出分隔符分隔;

(2)輸出的各item能夠字符串或數值、當前記錄的字段、變量或awk的表達式;數值會被隱式轉換爲字符串後輸出;

(3) print後面item若是省略,至關於print $0;輸出空白,使用pirnt "";

運算符:

運算符 描述

= += -= *= /= %= ^= **= 賦值

?: C條件表達式

|| 邏輯或

&& 邏輯與

~ ~! 匹配正則表達式和不匹配正則表達式

< <= > >= != == 關係運算符

空格 鏈接

+ - 加,減

* / & 乘,除與求餘

+ - ! 一元加,減和邏輯非

^ *** 求冪

++ -- 增長或減小,做爲前綴或後綴

$ 字段引用

in 數組成員



環境變量:

變量 描述

$n 當前記錄的第n個字段,字段間由FS分隔。

$0 完整的輸入記錄。

ARGC 命令行參數的數目。

ARGIND 命令行中當前文件的位置(從0開始算)。

ARGV 包含命令行參數的數組。

CONVFMT 數字轉換格式(默認值爲%.6g)

ENVIRON 環境變量關聯數組。

ERRNO 最後一個系統錯誤的描述。

FIELDWIDTHS 字段寬度列表(用空格鍵分隔)。

FILENAME 當前文件名。

FNR 同NR,但相對於當前文件。

FS 字段分隔符(默認是任何空格)。

IGNORECASE 若是爲真,則進行忽略大小寫的匹配。

NF 當前記錄中的字段數。

NR 當前記錄數。

OFMT 數字的輸出格式(默認值是%.6g)。

OFS 輸出字段分隔符(默認值是一個空格)。

ORS 輸出記錄分隔符(默認值是一個換行符)。

RLENGTH 由match函數所匹配的字符串的長度。

RS 記錄分隔符(默認是一個換行符)。

RSTART 由match函數所匹配的字符串的第一個位置。

SUBSEP 數組下標分隔符(默認值是/034)。

三、awk的printf命令

命令的使用格式:printf format, item1, item2,...

要點:

(1) 要指定format;

(2) 不會自動換行;如需換行則須要給出\n

(3) format用於爲後面的每一個item指定其輸出格式;

format格式的指示符都%開頭,後跟一個字符:

%c: 顯示字符的ASCII碼;

%d, %i: 十進制整數;

%e, %E: 科學計數法顯示數值;

%f: 顯示浮點數;

%g, %G: 以科學計數法格式或浮點數格式顯示數值;

%s: 顯示字符串;

%u: 顯示無符號整數;

%%: 顯示%自身;

修飾符:

#:顯示寬度

-:左對齊

+:顯示數值的符號

.#: 取值精度


四、awk輸出重定向

print items > output-file

print items >> output-file

print items | command


特殊文件描述符:

/dev/stdin: 標準輸入

/dev/stdout: 標準輸出

/dev/stderr: 錯誤輸出

awk的內置函數

split(string,array[,fieldsep[,seps]]):

功能:將string表示的字符串以fieldsep爲分隔符進行切片,並切片後的結果保存至array爲名的數組中;數組下標從1開始;

length(string)

功能:返回給定字串的長度

substr(string,start[,length])

功能:從string中取子串,從start爲起始位置爲取length長度的子串;

[root@iZ28qzns9m4Z bashtest]# last -n 5 |awk '{print $1 "\t" $3}'
root	211.161.27.115
root	61.182.229.120
root	61.182.229.120
root	180.91.225.119
root	180.91.225.119
	
wtmp	Tue
[root@iZ28qzns9m4Z bashtest]# 
[root@iZ28qzns9m4Z bashtest]# awk '{print substr($1,6)}' passwd 
x#0#0#root#/root#/bin/bash
#1#1#bin#/bin#/sbin/nologin
n#x#2#2#daemon#/sbin#/sbin/nologin
#3#4#adm#/var/adm#/sbin/nologin
[root@iZ28qzns9m4Z bashtest]# nl passwd |awk '{print length}'
38
39
46
相關文章
相關標籤/搜索