"""
<axiner>聲明:
(錯了另刂扌丁我)
(如若有誤,請記得指出喲,謝謝了!!!)
"""
grep 、sed、awk被稱爲linux中的"三劍客"
各特點:
gerp 查找
sed 編輯
awk 格式化分析並處理
++++++++++++++++++++
以下爲基礎介紹
++++++++++
grep
===========
grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用特定模式匹配(包括正則表達式)搜索文本,並默認輸出匹配行。
語法格式:
1\\ grep [options] 'pattern' [FILE...] # 選項可省略
2\\ ...|grep [options] 'pattern' # `|`管道前可理解爲:已查詢的臨時文件
常用選項:
-n # 顯示行號
-o # 只顯示匹配內容
-i # 忽略大小寫
-v # 取反,不匹配
-c # 只輸出匹配行的計數
-e # 可指定多個匹配項,每個匹配項前都要帶`-e` 如:grep -ne "a" -e "b" test.txt
sed
===========
sed 全稱StreamEDitor,即流編輯器。
處理流程:(以行爲處理單位)
讀取一行內容到模式空間--執行sed命令--輸出--重複之前操作
語法格式:
1\\ sed的命令格式: sed [options] 'sed command' filename
2\\ sed的腳本格式:sed [options] -f 'sed script' filename
常用選項:
-f: 後跟保存了sed指令的文件
-i: 直接對內容進行修改(不加時默認只是預覽顯示)
-n: 使用安靜(silent)模式。只列出被sed處理的行
-e: 多點編輯,允許多個腳本指令被執行。
-r: 支持擴展正則+ ? () {} |
sed中的編輯命令:
a: 追加 向匹配行後面插入內容
i: 插入 向匹配行前插入內容
d: 刪除 刪除匹配的內容
s: 替換 替換掉匹配的內容--針對單個
c: 更改 更改匹配行的內容--針對整行
p: 打印 打印出匹配的內容,通常與-n選項和用
=: 用來打印被匹配的行的行號
n: 讀取下一行,遇到n時會自動跳入下一行
r,w:讀和寫編輯命令,r用於將內容讀入文件,w用於將匹配內容寫入到文件
常用的替換-s:
sed 's/原字符串/替換字符串/'
-----
sed 's/^/內容/g' # 在所有行首添加
sed 's/$/內容/g' # 在所有行末添加
sed '2s/原字符串/替換字符串/g' # 替換第2行
sed '$s/原字符串/替換字符串/g' # 替換最後一行
sed '2,5s/原字符串/替換字符串/g' # 替換2到5行
sed '2,$s/原字符串/替換字符串/g' # 替換2到最後一行
相關正則:
$ 表示行尾
^ 表示行首
[a-z0-9]表示字符範圍
[^]表示除了字符集中的字符以外的字符
sed的正則中 \(\) 和 \{m,n\} 需要轉義
. 表示任意字符
* 表示零個或者多個
\+ 一次或多次
\? 零次或一次
\| 表示或語法
總結:
sed '定位+指令' 對象 # 即:定位+指令 >>>[定位]function
增(ai)刪(d)改(cs)查(p)
尾$全g
# 注意:
定位可用單數字、m,n、m,n!、正則等,
如:
sed '1s/aa/AA/g' test.txt # 替換第一行所有的aa
sed '5,$s/aa/AA/g' test.txt # 替換第五行到最後所有的aa
sed '5,$!s/aa/AA/g' test.txt # 替換非第五行到最後所有的aa
sed '/^2/c hello world' test.txt # 替換以2開頭的所有行
g寫在指令最後,如:sed '/^[0-9]/s/aa/AA/g' test.txt # 替換以數字開頭的所有行
awk
===========
awk 一個優良的文本處理工具,Linux及Unix環境中現有的功能最強大的數據處理引擎之一。
處理流程:(以行爲處理單位)
通常,awk是以文件的一行爲處理單位的。awk每接收文件的一行,然後執行相應的命令,來處理文本
語法格式:
1\\ awk [options] 'script' var=value file(s)
2\\ awk [options] -f scriptfile var=value file(s)
# 注意:
以單引號來界定script, 因此內部最好用雙引號
'script',即兩部分組成:'{pattern + action}'。pattern-模式:表示 awk 在數據中查找的內容,action-操作:是在找到匹配內容時所執行的一系列命令。
調用方式:
(1) awk 命令行
用於解決簡單的問題。當然,你也可以在shell script 程序中引用awk 命令行甚至awk 程序腳本。
(2) 使用-f 選項調用awk 程序
awk 允許將一段awk 程序寫入一個文本文件,然後在awk 命令行中用-f 選項調用並執行這段程序。
(3) 利用命令解釋器調用awk 程序
利用UNIX 支持的命令解釋器功能,我們可以將一段awk 程序寫入文本文件,然後在它的第一行加上#!/bin/awk –f.
關於'BEGIN{} //{command1; command2} END{}':
awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file
[-F|-f|-v] 大參數,-F指定分隔符,-f調用腳本,-v定義變量 var=value
' ' 引用代碼塊
BEGIN 初始化代碼塊,在對每一行進行處理之前,初始化代碼,主要是引用全局變量,設置FS分隔符
// 匹配代碼塊,可以是字符串或正則表達式
{} 命令代碼塊,包含一條或多條命令
; 多條命令使用分號分隔
END 結尾代碼塊,在對每一行進行處理之後再執行的代碼塊,主要是進行最終計算或輸出結尾摘要信息
常用命令選項:
-F fs fs 指定輸入分隔符,fs可以時字符串或正則表達式
-v var=value 賦值一個用戶定義變量,將外部變量傳遞給awk
-f scriptfile 從腳本文件中讀取awk命令
常見變量:
$n 當前記錄的第n個字段,字段間由FS分隔
$0 完整的輸入記錄 # {print} 與 {print $0}都是打印當前行的全部內容
FS 字段分隔符(默認是任何空格)
NF 一條記錄的字段的數目
NR 已經讀出的記錄數,就是行號,從1開始
FNR 各文件分別計數的行號
OFS 輸出記錄分隔符(輸出換行符),輸出時用指定的符號代替換行符
awk的 I/O指令:print, printf( ), getline, ...
awk的 流程控制指令:if(...){..} else{..}, while(...){...}, ...