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檔案和h檔案的檔案大小總和。 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那一列) ps
aux |
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一樣,對於連續的空字元,只顯示乙個空格。標籤內屬性的值必須用 或者 括起來,屬性名,和值之間不能有空格。對於不成對出現的標籤,必...