Linux 文本處理三劍客 – awk, sed, grep
grep過濾文本
https://zhuanlan.zhihu.com/p/561445240
grep 是 Linux/Unix 系統中的一個命令行工具,用于從文件中搜索文本或字符串。grep 代表全局正則表達式打印。當我們使用指定字符串運行 grep 命令時,如果匹配,則它將顯示包含該字符串的所在行,而不修改現有文件的內容。
sed修改文本
參考鏈接:https://blog.csdn.net/qq_43773590/article/details/119711444
https://blog.csdn.net/m0_59388634/article/details/122047377
sed編輯器被稱作流編輯器。流編輯器會在編輯器處理數據之前基于預先提供的一組規則來編輯數據流。sed是Linux下一款功能強大的非交互流式文本編輯器,可以對文本文件進行增、刪、改、查等操作,支持按行、按字段、按正則匹配文本內容,靈活方便,特別適合于大文件的編輯。
sed 命令的命令格式是這樣的:
$ sed command file
其中,command 部分是 sed 命令的精髓,對 command 部分的掌握程度決定了你是不是 sed 高手。
command 部分可以分為兩塊知識:一塊是范圍設定,一塊是動作處理。
范圍設定,可以采用兩種不同的方式來表達:
指定行數:比如‘3,5’表示第 3、第 4 和第 5行;而‘5,$’表示第 5 行至文件最后一行。
模式匹配:比如/ ^ [^dD]/表示匹配行首不是以 d 或 D 開頭的行。
而動作處理部分,會提供很豐富的動作供你選擇,下面就來介紹幾個最常用的動作吧:
d:表示刪除行。
p:打印該行。
r:讀取指定文件的內容。
w:寫入指定文件。
a:在下面插入新行新內容。
sed的常用編輯命令
a :新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c :取代, c 的后面可以接字串,整行替換
d :刪除,刪除指定行delete,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :打印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行~
s :取代,字符串替換,通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!
=:輸出行號
r:將文件的內容讀入 read
w:將文本寫入文件 write
awk處理文本
https://blog.csdn.net/Dark_Tk/article/details/114844529
awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk 是 AWK 的 GNU 版本。
sed命令常用于一整行的處理,而awk比較傾向于將一行分成多個“字段”然后再進行處理。awk信息的讀入也是逐行讀取的,執行結果可以通過print的功能將字段數據打印顯示。在使用awk命令的過程中,可以使用邏輯操作符“&&”表示“與”、“||”表示“或”、“!”表示“非”;還可以進行簡單的數學運算,如+、-、*、/、%、^分別表示加、減、乘、除、取余和乘方。
命令格式:
awk 選項 ‘模式或條件 {操作}’ 文件 1 文件 2 …
awk -f 腳本文件 文件 1 文件 2 …
參考鏈接:https://zhuanlan.zhihu.com/p/51771974
awk ‘{pattern + action}’ {filenames}
盡管操作可能會很復雜,但語法總是這樣,其中 pattern 表示 AWK 在數據中查找的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號({})不需要在程序中始終出現,但它們用于根據特定的模式對一系列指令進行分組。 pattern就是要表示的正則表達式,用斜杠括起來。
awk語言的最基本功能是在文件或者字符串中基于指定規則瀏覽和抽取信息,awk抽取信息后,才能進行其他文本操作。完整的awk腳本通常用來格式化文本文件中的信息。
awk常見的內建變量:
FS:列分割符。指定每行文本的字段分隔符,默認為空格或制表位。與"-F"作用相同
NF:當前處理的行的字段個數。
NR:當前處理的行的行號(序數)。
$0:當前處理的行的整行內容。
$n:當前處理行的第n個字段(第n列)。
FILENAME:被處理的文件名。
RS:行分隔符。awk從文件上讀取資料時,將根據RS的定義把讀取的資料切割成許多條記錄,而awk一次僅讀入一條記錄,以進行處理。預設值是’\n’
awk中同時提供了print和printf兩種打印輸出的函數。
其中print函數的參數可以是變量、數值或者字符串。字符串必須用雙引號引用,參數用逗號分隔。如果沒有逗號,參數就串聯在一起而無法區分。這里,逗號的作用與輸出文件的分隔符的作用是一樣的,只是后者是空格而已。
printf函數,其用法和c語言中printf基本相似,可以格式化字符串,輸出復雜時,printf更加好用,代碼更易懂。