對於文字的操作分為兩種操作,一種是按行操作,一種是按列操作。
簡單的命令有grep(行操作)和cut(列操作)。
複雜點的有sed(行操作)和awk(列操作)。
樣例文字
hello tom
hi marry
how are you
什麼是行操作:簡單的例子就是,獲取上面文字中帶有hello的行就是行操作。
什麼是列操作:簡單的例子就是獲取上面文字中的第一列操作。
package com.zzrenfeng.linux;
/** * grep命令
* *@author hanlipeng
* */
public
class
grep b 字母a出現兩次
* a\b 至少出現兩次
* a\b 出現2到4次
* [0-9]\xx[0-9]\ 前四個是數字,中間是xx,後四個是數字
* * 簡單實用
* 過濾出行裡面有hello的行
* grep 'hello' filename.txt
* * 過濾出所有行裡面不含hello的行
* grep -v 'hello' filename.txt
* */
}
package com.zzrenfeng.linux;
/** * cut用法
* 命令可以從乙個文字檔案或者文字流中提取文字列。
* * sort wc uniq
*@author rf
* */
public
class
cut
package com.zzrenfeng.linux;
/** *
*@author hanlipeng
* */
public
class
sed
package com.zzrenfeng.linux;
/** * awk是乙個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。
* * @author hanlipeng
* */
public class awk '
* * 如果只是顯示/etc/passwd的賬戶
* cat /etc/passwd |awk -f
':'''
* * 如果只是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以tab鍵分割
* cat /etc/passwd |awk -f
':'''
* * 如果只是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以逗號分割,而且在所有行新增列名name,shell,在最後一行新增"blue,/bin/nosh"。
* cat /etc/passwd |awk -f
':''begin end '
* * 搜尋/etc/passwd有root關鍵字的所有行
* awk -f: '/root/' /etc/passwd
* * 搜尋支援正則,例如找root開頭的: awk -f: '/^root/' /etc/passwd
* * 搜尋/etc/passwd有root關鍵字的所有行,並顯示對應的shell
* awk -f: '/root/' /etc/passwd
* * awk內建變數
* awk有許多內建變數用來設定環境資訊,這些變數可以被改變,下面給出了最常用的一些變數。
* *
* argc 命令列引數個數
* argv 命令列引數排列
* environ 支援佇列中系統環境變數的使用
* filename awk瀏覽的檔名
* fnr 瀏覽檔案的記錄數
* fs 設定輸入域分隔符,等價於命令列 -f選項
* nf 瀏覽記錄的域的個數
* nr 已讀的記錄數
* ofs 輸出域分隔符
* ors 輸出記錄分隔符
* rs 控制記錄分隔符
* * 統計/etc/passwd:檔名,每行的行號,每行的列數,對應的完整行內容:
* * #awk -f ':' '' /etc/passwd
* filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
* filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
* filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
* filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh
* *
* 使用printf替代print,可以讓**更加簡潔,易讀
* awk -f
':''' /etc/passwd
* *
* * 高階awk程式設計
* 除了awk的內建變數,awk還可以自定義變數
* * 下面統計/etc/passwd的賬戶人數
* awk ' end' /etc/passwd
* root:x:0:0:root:/root:/bin/bash
* ......
* user count is 40
* * 這裡沒有初始化count,雖然預設是0,但是妥當的做法還是初始化為0:
* awk 'begin end' /etc/passwd
* [start]user count is 0
* root:x:0:0:root:/root:/bin/bash
* ...
* [end]user count is 40
* *
* 統計某個資料夾下的檔案占用的位元組數
* ls -l |awk 'begin end'
* [end]size is 8657198
* * * 如果以m為單位顯示:
* ls -l |awk 'begin end'
* [end]size is 8.25889 m
* 注意,統計不包括資料夾的子目錄。
* *
*//**
* 條件語句以後需要了再進行學習
if (expression)
if (expression) else
if (expression) else
if (expression1) else
統計某個資料夾下的檔案占用的位元組數,過濾4096大小的檔案(一般都是資料夾):
ls -l |awk 'begin } end'
[end]size is 8.22339 m
迴圈語句
awk中的迴圈語句同樣借鑑於c語言,支援while、do/while、for、break、continue,這些關鍵字的語義和c語言中的語義完全相同。
陣列 因為awk中陣列的下標可以是數字和字母,陣列的下標通常被稱為關鍵字(key)。值和關鍵字都儲存在內部的一張針對key/value應用hash的**裡。由於hash不是順序儲存,因此在顯示陣列內容時會發現,它們並不是按照你預料的順序顯示出來的。陣列和變數一樣,都是在使用時自動建立的,awk也同樣會自動判斷其儲存的是數字還是字串。一般而言,awk中的陣列用來從記錄中收集資訊,可以用於計算總和、統計單詞以及跟蹤模板被匹配的次數等等。
顯示/etc/passwd的賬戶
awk -f
':''begin ; end' /etc/passwd
0 root
1 daemon
2 bin
3 sys
4 sync
5 games
......
這裡使用for迴圈遍歷陣列
*/}
linux下sed 和 awk用法
常用選項 常用命令 刪除某行 root localhost ruby sed 1d ab 刪除第一行 root localhost ruby sed d ab 刪除最後一行 root localhost ruby sed 1,2d ab 刪除第一行到第二行 root localhost ruby s...
sed 和 awk 的運用
n 遮蔽預設輸出,預設sed會輸出讀取文件的全部內容 r 讓sed支援擴充套件正則 i sed直接修改原始檔,預設sed只是通過記憶體臨時修改檔案,原始檔無影響 sed n 3,6p etc passwd 答案 sed i s usr local usr src g file 答案 awk home...
awk和sed的常規用法
sed 的用法 sed編輯器稱作stream editor。如vim則是互動式文字編輯器。流編輯器就是在處理資料之前基於預先提供的一組規則來編輯資料。1.一次從輸入中讀取一行資料 2.根據所提供的編輯器命令匹配資料 3.按照命令修改流中的資料 4.將新的資料輸出到stdout 命令格式 set op...