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()函數的種子 |
取 整,過程沒有舍入 | |
産生一個大于等于0而小于1的随機數 |