文本處理工具sed及awk的用法


sed: stream editor, 流編輯器;


sed對文本的處理很強大,並且sed非常小,參數少,容易掌握,他的操作方式根awk有點像。sed按順序逐行讀取文件。然後,它執行爲該行指定的所有操作,並在完成請求的修改之後的內容顯示出來,也可以存放到文件中。完成了一行上的所有操作之後,它讀取文件的下一行,然後重複該過程直到它完成該文件。在這裏要注意一點,源文件(默認地)保持不被修改。sed默認讀取整個文件並對其中的每一行進行修改。說白了就是一行一行的操作。我用sed主要就是用裏面的替換功能,真的很強大。

sed –h

-n, --quiet, --silent    取消自動打印模式空間

-e 腳本, --expression=腳本   添加腳本到程序的運行列表

-f 腳本文件, --file=腳本文件  添加腳本文件到程序的運行列表

 --follow-symlinks    直接修改文件時跟隨軟鏈接

 -i[擴展名], --in-place[=擴展名]   直接修改文件(如果指定擴展名就備份文件)

 -l N, --line-length=N   指定“l”命令的換行期望長度

 --posix  關閉所有 GNU 擴展

 -r, --regexp-extended  在腳本中使用擴展正則表達式

 -s, --separate  將輸入文件視爲各個獨立的文件而不是一個長的連續輸入

 -u, --unbuffered  從輸入文件讀取最少的數據,更頻繁的刷新輸出

 

基本正則表達式元字符:

           字符匹配:., [], [^]

           次數匹配:*, \?, \+,\{m,n\}, \{n\}

           位置錨定:^, $, \<, \>

           分組及引用:\(\), \1, \2, ...

           多選一:a|b|c

 

刪除/tmp/grub2.cfg文件中所有行的行首的空白字符;

sed 's/^[[:space:]]\+//' /tmp/grub2.cfg


刪除/tmp/grub2.cfg文件中所有以#開頭,後跟至少一個空白字符的行的行首的#和空白字符;

sed 's/^#[[:space:]]\+//' /tmp/grub2.cfg


 

 

awk(gawk):文本格式化工具,報告生成器


awklinux下的一個命令,他對其他命令的輸出,對文件的處理都十分強大,其實他更像一門編程語言,他可以自定義變量,有條件語句,有循環,有數組,有正則,有函數等。他讀取輸出,或者文件的方式是一行,一行的讀,根據你給出的條件進行查找,並在找出來的行中進行操作,感覺他的設計思想,真的很簡單,但是結合實際情況,具體操作起來就沒有那麼簡單了。他有三種形勢,awkgawknawk,平時所說的awk其實就是gawk

 

 

1,變量

變 量

描述

$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)。

 

2,運算符

運算符

描述

= += -= *= /= %= ^= **=

賦值

?:

C條件表達式

||

邏 輯或

&&

邏輯與

~ ~!

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

< <= > >= != ==

關 系運算符

空格

連接

+ -

加,減

* / &

乘,除與求餘

+ - !

一元加,減和邏輯非

^ ***

求冪

++ --

增加或減少,作爲前綴或後綴

$

字 段引用

in

數組成員

 

3,awk的正則

匹配符

描述

\Y

匹配一個單詞開頭或者末尾的空字符串

\B

匹配單詞內的空字符串

\<

匹配一個單詞的開頭的空字符串,錨定開始

\>

匹配一個單詞的末尾的空字符串,錨定末尾

\W

匹配一個非字母數字組成的單詞

\w

匹配一個字母數字組成的單詞

\'

匹配字符串末尾的一個空字符串

\‘

匹配字符串開頭的一個空字符串

 

4,字符串函數

函數名

描述

sub

匹配記錄中最大、最靠左邊的子字符串的正則表達式,並用替換字符串替換這些字符串。如果沒有指定目標字符串就默認使用整個記錄。替換隻發生在第一次匹配的  時候

gsub

整個文檔中進行匹配

index

返回子字符串第一次被匹配的位置,偏移量從位置1開始

substr

返回從位置1開始的子字符串,如果指定長度超過實際長度,就返回整個字符串

split

可按給定的分隔符把字符串分割爲一個數組。如果分隔符沒提供,則按當前FS值進行分割

length

返回記錄的字符數

match

返回在字符串中正則表達式位置的索引,如果找不到指定的正則表達式則返回0。match函數會設置內建變量RSTART爲字符串中子字符串的開始位 置,RLENGTH爲到子字符串末尾的字符個數。substr可利於這些變量來截取字符串

toupper和tolower

可用於字符串大小間的轉換,該功能只在gawk中有效

 

5,數學函數

函數名

返回值

atan2(x,y)

y,x 範圍內的餘切

cos(x)

餘弦函數

exp(x)

求 冪

int(x)

取整

log(x)

自然對 數

rand()

隨機數

sin(x)

正弦

sqrt(x)

平 方根

srand(x)

x是rand()函數的種子

int(x)

取 整,過程沒有舍入

rand()

產生一個大於等於0而小於1的隨機數

 

 

 

 


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