今天主要介紹linux中兩大文本編輯器的入門級用法:sed(stream editor)和awk
先說說sed,sed即stream editor。是一種非交互式上下文編輯器,它對源文件沒有破壞性,查詢中不改動源文件(但可以實現此功能),sed通過限制條件對文本進行行讀取,並將讀取內容貯存在內存中,根據限制內容pattern將文本由選擇性的輸出。sed不僅僅能夠根據pattern(樣式)作爲約束條件,它還支持腳本導入的約束條件,這樣節省了可觀的鍵入和隨之而來的錯誤。
下面我們來看看sed的簡單用法:
sed [option] /pattern/command file…
sed [option] adr1,adr2/command file…
sed [option] script file..
command:命令不支持像選項那樣可以組合使用,所以每條命令在每個語句中只能出現一次。
p:顯示出所有信息,在設定顯示條件的情況下匹配內容會多顯示一次。
d:刪除匹配內容所在的行。
a\:在指定行後添加一行或多行。
i\:在指定行前添加一行或多行。(\後爲添加內容)
s:查找替換 (s/查找要替換的內容/新替換的字符串/ i不區分大小學 g 全局替換查找)
pattern支持正則表達式,與grep中的使用格式相同。
注意:在使用正則表達式時,一旦用到元字符,則該這個正則表達式必須加引號。
option:
-n 取消默認顯示輸出 使顯示匹配內容
-e 在一個sed語句中加入多個限制條件,每個均以-e開頭
-f 在-f選項後可直接跟一個腳本,sed就以此腳本導入限制條件
-i 在sed中加入該選項,將把原來對內存的
eg:
sed /關鍵字/ 文件目錄
[root@server55 tmp]# sed -n /id/p /etc/inittab #若要其顯示內容p命令必不可少,只顯示匹配則需要-n選項
sed 地址1,地址2 文件目錄 #地址信息包括:行號、字符串和正則表達式。
[root@server55 tmp]# sed -n 2,5p /etc/inittab #顯示2~5行的所有內容
[root@server55 tmp]# sed -n /bug/,/bug/p /proc/cpuinfo #從帶有bug字符串的第一行顯示到最後一行
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
[root@server55 tmp]# sed -n '/^cache/p' /proc/cpuinfo #以cache開頭的行(正則表達式用到元字符必須加引號!)
[root@server55 tmp]# sed '/^processor/ a\#this is my cpu!' /proc/cpuinfo # a\命令故不能在出現p命令了,i\的命令與之相同。
processor : 0
#this is my cpu!
vendor_id : GenuineIntel
….
[root@server55 tmp]# sed '1,$s/yes/YES!/g' /proc/cpuinfo
# 查找範圍1,$表示1到最後一行,s/ 匹配並替換的內容 / 新替換字段 / g表示匹配行內全局替換。
[root@server55 tmp]# sed '/^[[:space:]]*#/d' /etc/inittab
#刪除顯示內容中以 0個或多個空白字符緊接#開頭的行
下面說說awk,awk不僅是linux也是任何環境中現有功能最強大的數據處理引擎之一,它不僅支持簡單的查找命令而且支持創建簡短的程序,這些程序可以實現數據排序、處理數據、輸入計算以及生成報表。與其說他是一款數據處理程序倒不如說他是一種用於文件的編程語言工具。
awk的格式:awk的命令有模式pattern和操作action組成,模式pattern由兩斜槓之間的正則表達式和一個或多個awk操作符組成;操作action由括在大括號內的一條或多條語句組成,語句之間用分號隔開。注意pattern中的正則表達式兩端必須加/ /,action的兩端必須加{ }。具體格式如下:
[root@server55 ~]# awk 'pattern{action}' filename
awk的格式化輸出:
print命令
awk默認將整個文本以換行符分成若干個record,將每record以空格分成了若干個field。
每個field分別對應$1$2$3…$n,整個record即1..n的總和爲$0。
並且用一下幾個內置變量來定義:
FS:輸入字段分隔符,默認爲空格
RS:輸入行分隔符,默認爲換行符
OFS:輸出字段分隔符,默認問空格
ORS:輸出行分隔符,默認爲換行符
NF:當前記錄中的字段數
NR:當前的行數
BEGIN模式
BEGIN+操作塊,awk必須在輸入文件在進行任何處理之前執行BEGIN後的模塊.
eg:
[root@server55 ~]# awk 'BEGIN{FS=":";OFS="-"}{print $1,$2}' /etc/passwd
#分析:輸入文件在未執行任何操作之前,將FS和OFS分別替換,然後輸出被新分隔符分割的字段 1 和 2 。
END模式
END+操作塊,此模式不匹配任何輸入行,而是執行任何與之關聯的操作。即awk在處理完成輸出前執行END+操作塊。
eg:
[root@server55 ~]# awk 'BEGIN{FS=":";OFS="-"}{print $1,$2}END{print "show complet!"}' /etc/passwd
#在輸出結果後加入字符串show complet!
[root@server55 ~]# awk 'BEGIN{FS=":";OFS="-"}{print NR":"$1,$2}END{print "show complet!"}' /etc/passwd
1:root-x
2:bin-x
3:daemon-x
4:adm-x
5:lp-x
6:sync-x
7:shutdown-x
…
#此爲print中加入NR的效果,顯示了行號;並且還顯示了額外字符串”: ”,print命令和C語言中的相同 輸出變量時不需要家任何修飾符,輸出文本內容則要加上” ”雙引號。
[root@server55 ~]# awk 'BEGIN{FS=":";OFS="-";RS=";"}{print NF,$1,$2}END{print "show complet!"}' /etc/passwd
307-root-x
show complet!
#我將換行符換成了分號”;”所以整個文檔視爲一條record,此時再用NF顯示field的數目就顯示爲307(ps:以換行符計算時,我的/etc/passwd行數爲51,且每行開頭和結尾沒有”:”,故307=51*7-50)
以上是對sed和awk兩個強大文本編輯程序的入門級使用說明,他們功能之強大遠不止這些,其餘的高級功能將在以後的博文中陸續向大家介紹。
再向大家介紹兩個小的文本排序程序:sort和uniq
sort option filename
-u 移除連續重複的行 -r 反序排序
-n 按數值大小排序
uniq option filename #相同且連續的行只顯示一次
-u 只輸出沒有重複的行,有相同的行則不予顯示
-d 只輸出有重複的行 -c顯示重複行重複的次數
下面向大家介紹一款強大的文本編輯器vim
在linux絕大多數文檔都是以純文本ASCII碼的形式存在,而vim就是一款處理純文本數據功能強大的編輯器。它在所有的uinx系統中都存在;其具有程序編輯功能,對語法主動會以不同顏色的字體加以區分。
vim的編輯模式:編輯模式、輸入模式和末行模式。
編輯模式
vim打開文檔直接進入的模式,此模式可直接對文本進行刪除複製等操作;
輸入模式
在編輯模式下鍵入i, I, o, O, a, A, r, R等任何一個字母都會進入此模式,此模式下使用鍵盤對文件實現文本輸入。
末行模式
在編輯模式下輸入:?/中的任何一個即進入此模式,在此模式下主要實現對vim進行配置和對文件進行操作以及退出編輯操作。
打開vim編輯文檔:
vim filename #打開一個新文檔
vim +n filename #打開一個已存在的文檔,並將光標移動到文檔的第n行
vim +/字符 filename #打開一個已存在的文檔,並將光標移動到匹配字符上
用vim打開文檔之後,即進入編輯模式,編輯模式中的常用操作:
光標跳轉:左h 下j 上k 右l
詞間跳轉:w每次向後跳到一個單詞的詞首;e每次向後調到一個單詞的詞尾;每次向前跳到一個單詞的詞首;w,c,b+n表示跳躍的詞數。
行內跳轉:^跳到當前行的行首;$跳到當前行的行尾。
行間跳轉:nG跳到第n行;gg跳到第一行;G跳到最後一行。
刪除:x單字刪除;dd單行刪除;n+dd 以當前光標爲起點,進行n行刪除;
上下翻屏:ctrl+f向後翻屏;ctrl+向前翻屏;ctrl+d向後翻半屏;ctrl+u向前翻半屏。
複製粘貼:yy 光標對應行單行復制;n+yy 光標對應行往下n行復制;p 粘貼;yw 複製單詞;y$ 複製光標位置到行尾。
撤銷:u逐步撤銷;U 全部撤銷。
取消撤銷:ctrl+r
. :重複上一動作。
進入可視化模式:v 單詞選中;V單行選中。
窗口分割:ctrl+w,s 水平分割窗口
ctrl+w,v豎直分割窗口
ctrl+w,ctrl+w 光標在窗口之前切換
vim打開多個文件並實現多窗口
vim –o filename1 filename2 filename3 …
在編輯模式下輸入“:”進入末行模式,在末行模式中可以對vim的當前工作特徵進行設定:
顯示行號 set nu 取消顯示行號 set nonu
自動縮進 set ai 取消自動縮進 set nosi
忽略大小寫 set ic 顯示括號匹配 set sm (ShowMatch)
語法模式 開啓 syntax on 關閉syntax off
若要使每次打開vim都有能保存配置,全局配置可以修改/etc/vimrc 用戶配置修改~/.vimrc
以上就是對vim使用中,較爲常用的操作的說明。