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