sed awk文字處理教程

2021-09-08 04:52:29 字數 3549 閱讀 9354

sed全名叫

stream editor

,流編輯器,用程式的方式來編輯文字,相當的hacker啊。sed基本上就是玩正則模式匹配,所以,玩sed的人,正規表示式一般都比較強。

把my字串替換成hao chen』s $

sed"s/my/hao chen's/g"

pets.txt

s表示替換命令

,/my/表示匹配my,/hao chen』s/表示把匹配替換成hao chen』s,/g 表示一行上的替換所有的匹配

注意:上面的sed

並沒有對檔案的內容改變

,只是把處理過後的內容輸出,如果你要寫回檔案,你可以使用重定向,如: $

sed"s/my/hao chen's/g"

pets.txt > hao_pets.txt

或使用 -i 引數

直接修改檔案內容

: $

sed-i

"s/my/hao chen's/g"

pets.txt

在每一行最前面加點東西:

$ sed

's/^/

#/g'

pets.txt

#this is my cat

#  my cat's name is betty

#this is my dog

#  my dog's name is frank

#this is my fish

#  my fish's name is george

#this is my goat

#  my goat's name is adam

可以用於批量注釋

在每一行最後面加點東西:

$ sed

's/$/ --- /g'

pets.txt

this is my

cat---

my cat's name is betty ---

this is my dog ---

my dog's name is frank ---

this is my fish ---

my fish's name is george ---

this is my goat ---

my goat's name is adam --- 參看

sed的手冊

**********====awk***************====

之所以叫awk是因為其取了三位創始人的首字元。要學awk,就得提一提awk的一本相當經典的書《

the awk programming language

》,它在

豆瓣上的評分

是9.4分!在

。 示例,輸出第1列和第4列

awk''netstat

.txt

單引號中的被大括號括著的就是awk的語句,注意,其只能被單引號包含。

awk的

格式化輸出

awk''netstat

.txt

和c語言的printf沒什麼兩樣

過濾記錄

1,過濾條件:第三列的值為0 && 第6列的值為listen

awk'$3==0 && $6=="listen" '

netstat

.txt

awk' $3>0 '

netstat

.txt

awk'$3==0 && $6=="listen" || nr==1 '

netstat

.txt

內建變數

nf 多少列

nr 行號 有多個檔案話,這個值不斷累加

fnr 各個檔案自己的行號

如:我們如果要輸出行號:

$ awk '$3==0 && $6=="established" || nr==1 ' netstat.txt

指定分隔符

awk-f:

''/etc/passwd

(-f的意思就是指定分隔符)

以\t作為分隔符輸出的例子(下面使用了/etc/passwd檔案,這個檔案是以:分隔的):

awk-f:

''ofs=

"\t"

/etc/passwd

字串匹配

匹配fin狀態

awk'$6 ~ /fin/ || nr==1 '

ofs=

"\t"

netstat

.txt

匹配wait字樣的狀態

awk'$6 ~ /wait/ || nr==1 '

ofs=

"\t"

netstat

.txt

~ 表示模式開始。/ /中間的內容是模式。這就是乙個正規表示式的匹配。

awk可以像grep一樣的去匹配第一行,就像這樣:

awk'/listen/'

netstat

.txt

模式取反

awk'!/wait/'

netstat

.txt

折分檔案

按第6例分隔檔案,相當的簡單(其中的nr!=1表示不處理表頭)。

awk'nr!=1'

netstat

.txt ls

established  fin_wait1  fin_wait2  last_ack  listen 

netstat

.txt  time_wait

也可以把指定的列輸出到檔案:

awk'nr!=1'

netstat

.txt

下面的命令計算所有的c檔案,cpp檔案和**件的檔案大小總和。 ls

-l  *.cpp *.c *.h |

awk' end '

統計各個connection狀態的用法

awk'nr!=1 end '

netstat

.txt

time_wait, 3

fin_wait1, 1

established, 6

fin_wait2, 3

last_ack, 1

listen, 4

統計每個使用者的程序的佔了多少記憶體(注:sum的rss那一列)

psaux |

awk'nr!=1 end '

dbus, 540kb

mysql, 99928kb

www, 3264924kb

root, 63644kb

hchen, 6020kb

#從file檔案中找出長度大於80的行

awk'length>80'

file

#按連線數檢視客戶端ip

netstat

-ntu |

awk''

| cut

-d: -f1 |

sort

| uniq

-c |

sort

-nr

#列印99乘法表

seq9 |

sed'h;g'

| awk-v

rs=''''

參看gawk的手冊

: 參考:

sed awk文字處理教程

sed全名叫 stream editor 流編輯器,用程式的方式來編輯文字,相當的hacker啊。sed基本上就是玩正則模式匹配,所以,玩sed的人,正規表示式一般都比較強。把my字串替換成hao chen s sed s my hao chen s g pets.txt s表示替換命令 my 表示...

shell文字處理

最於檔案的操作以前都是用高階程式語言來操作的。今天恰好需要將乙個目錄中的檔案資訊儲存到sqlite3資料庫中 我用linux中的工具和shell來作為自己畢業設計做原型開發 下面記錄一下這裡用到的部分知識,以作備忘。用ls命令來說明 1.關於shell中的管道和重定向問題。這個知識基礎,這裡不再說了...

WML 文字處理

wml使用xml文件字符集,目前支援unicode 2.0,和hdml不同,wml的所有標籤,屬性和規定的可接收值必須小寫,card的名字和變數也是區分大小寫的。和hdml一樣,對於連續的空字元,只顯示乙個空格。標籤內屬性的值必須用 或者 括起來,屬性名,和值之間不能有空格。對於不成對出現的標籤,必...