sed awk grep 專題 鳥哥

2021-07-10 05:29:21 字數 2906 閱讀 8797

grep, sed 與 awk 相當有用 !

gerp 查詢, sed 編輯, awk 根據內容分析並處理.

awk(關鍵字:分析&處理) 一行一行的分析處理 awk '條件型別1條件型別2' filename, awk 也可以讀取來自前乙個指令的 standard input

相對於sed常常用於一整行處理, awk則比較傾向於一行當中分成數個"字段"(區域)來處理, 預設的分隔符是空格鍵或tab鍵

例如:last -n 5 | awk '' 這裡大括號內$1"\t"$3 之間不加空格也可以, 不過最好還是加上個空格, 另外注意"\t"是有雙引號的, 因為本身這些內容都在單引號內

$0 代表整行 $1代表第乙個區域, 依此類推

awk的處理流程是:

1. 讀第一行, 將第一行資料填入變數 $0, $1... 等變數中

2. 依據條件限制, 執行動作

3. 接下來執行下一行

所以, awk一次處理是一行, 而一次中處理的最小單位是乙個區域

另外還有3個變數, nf: 每一行處理的字段數, nr 目前處理到第幾行 fs 目前的分隔符

邏輯判斷 > < >= <= == !== , 賦值直接使用=

cat /etc/passwd | awk ' $3<10 ' 首先定義分隔符為:, 然後判斷, 注意看, 判斷沒有寫在{}中, 然後執行動作, fs=":"這是乙個動作, 賦值動作, 不是乙個判斷, 所以不寫在{}中

begin end , 給程式設計師乙個初始化和收尾的工作, begin之後列出的操作在{}內將在awk開始掃瞄輸入之前執行, 而end{}內的操作, 將在掃瞄完輸入檔案後執行.

awk '/test/ ' abc 將帶有test的行的行號列印出來, 注意//之間可以使用正規表示式

awk {}內, 可以使用 if else ,for(i=0;i<10;i++), i=1 while(iawk的很多用法都等同於c語言, 比如"\t" 分隔符, print的格式, if, while, for 等等

awk 是相當複雜的工具, 真正使用時, 再補充吧. (有關工具的picture)

sed(關鍵字: 編輯) 以行為單位的文字編輯工具 sed可以直接修改檔案, 不過一般不推薦這麼做, 可以分析 standard input

基本工作方式: sed [-nef] '[動作]' [輸入文字]

-n : 安靜模式, 一般sed用法中, 來自stdin的資料一般會被列出到螢幕上, 如果使用-n引數後, 只有經過sed處理的那一行被列出來.

-e : 多重編輯, 比如你同時又想刪除某行, 又想改變其他行, 那麼可以用 sed -e '1,5d' -e 's/abc/***/g' filename

-f : 首先將 sed的動作寫在乙個檔案內, 然後通過 sed -f scriptfile 就可以直接執行 scriptfile 內的sed動作 (沒有實驗成功, 不推薦使用)

-i : 直接編輯, 這回就是真的改變檔案中的內容了, 別的都只是改變顯示. (不推薦使用)

動作:a 新增, a 後面可以接字串, 而這個字串會在新的一行出現. (下一行)

c 取代, c 後面的字串, 這些字串可以取代 n1,n2之間的行

d 刪除, 後面不接任何東西

i 插入, 後面的字串, 會在上一行出現

p 列印, 將選擇的資料列出, 通常和 sed -n 一起運作 sed -n '3p' 只列印第3行

s 取代, 類似vi中的取代, 1,20s/old/new/g

[line-address]q 退出, 匹配到某行退出, 提高效率

[line-address]r 匹配到的行讀取某檔案 例如: sed '1r qqq' abc , 注意, 寫入的文字是寫在了第1行的後邊, 也就是第2行

[line-address]w file, 匹配到的行寫入某檔案  例如: sed -n '/m/w qqq' abc , 從abc中讀取帶m的行寫到qqq檔案中, 注意, 這個寫入帶有覆蓋性.

舉例:sed '1d' abc 刪除 abc 檔案裡的第一行, 注意, 這時會顯示除了第一行之外的所有行, 因為第一行已經被刪除了(實際檔案並沒有被刪除,而只是顯示的時候被刪除了)

sed -n '1d' abc 什麼內容也不顯示, 因為經過sed處理的行, 是個刪除操作, 所以不現實.

sed '2,$d' abc 刪除abc中從第二行到最後一行所有的內容, 注意, $符號正規表示式中表示行末尾, 但是這裡並沒有說那行末尾, 就會指最後一行末尾, ^開頭, 如果沒有指定哪行開頭, 那麼就是第一行開頭

sed '$d' abc 只刪除了最後一行, 因為並沒有指定是那行末尾, 就認為是最後一行末尾

sed '/test/d' abc 檔案中所有帶 test 的行, 全部刪除

sed '/test/a rrrrrrr' abc 將 rrrrrrr 追加到所有的帶 test 行的下一行 也有可能通過行 sed '1,5c rrrrrrr' abc

sed '/test/c rrrrrrr' abc 將 rrrrrrr 替換所有帶 test 的行, 當然, 這裡也可以是通過行來進行替換, 比如 sed '1,5c rrrrrrr' abc

grep(關鍵字: 擷取) 文字蒐集工具, 結合正規表示式非常強大

主要引數

-c : 只輸出匹配的行

-i : 不區分大小寫

-h : 查詢多檔案時不顯示檔名

-l : 查詢多檔案時, 只輸出包含匹配字元的檔名

-n : 顯示匹配的行號及行

-v : 顯示不包含匹配文字的所有行(我經常用除去grep本身)

基本工作方式: grep 要匹配的內容 檔名, 例如:

grep 'test' d* 顯示所有以d開頭的檔案中包含test的行

grep 'test' aa bb cc 顯示在 aa bb cc 檔案中包含test的行

grep '[a-z]\\' aa 顯示所有包含字串至少有5個連續小寫字母的串

sed awk grep 專題 鳥哥

grep,awk grep 專題 鳥哥 html target self sed 與 awk 相當有用 gerp 查詢,sed 編輯,awk 根據內容分析並處理.awk 關鍵字 分析 處理 一行一行的分析處理 awk 條件型別1條件型別2 filename,awk 也可以讀取來自前乙個指令的 sta...

哥好鳥 哥啊鳥 哥回鳥

哥啊 鳥又叫了 海南島 廣西等是盛產懷參的地方,有野生的懷參,也有人工種植的懷參,它是一種南藥,是一種根莖的藤本植物,藤條攀爬在藤架上或樹枝上,葉子是心形的,開白色的小花,根莖長在地下,乙個懷參就有4 5斤重,有的1公尺長左右。含多種維生素 氨基酸和礦物質,可以增強人體免疫力,防止動脈硬化,改善血液...

鳥哥私房菜

鳥哥 linux 私房菜 ad 在我們平時使用unix命令的時候,需要平時多積累並且整理。下面,就是我們在平時時候整理的unix命令。而且是很全面的bash內建命令.bash內建unix命令 執行當前程序環境中的程式。同source。file dotunix命令從檔案file中讀取命令並執行。空操作...