一、文本處理工具sed
sed [option]….'script] [input-file]…
簡介: sed是一種流編輯器,他一次處理一行的內容,處理時把當前處理的行存儲在臨時緩沖區中,這個緩沖區被稱為模式空間,接著用sed命令處理,處理完成后把模式空間的內容送往屏幕,接著處理下一行,知道文件末尾,而文件的內容并沒有改變。模式空間相當于sed的加工廠,除此以外,還有保持空間,用于臨時存儲數據。
sed的工作原理圖
sed是按行編輯文本的,每次從文本中取出一行,放置到自己的模式空間里進行處理,sed對文本的內容會有匹配到的行和匹配不到的行兩種情況,sed對匹配到行進行處理然后輸出到屏幕上,而匹配不到的行不會進行處理,同時也會輸出到屏幕上。
地址定界編輯命令
常用選項:
-n:不輸出模式空間的內容至屏幕 -e:script,--expression=script:多點編輯 -f: /PATH/TO/SED_SCRIPT_FILE 每行一個編輯命令`````` -r,--regexp-extended:支持使用擴展正則表達式; -i [SUFFIX],--in-place[=SUFFIX]:直接編輯原文件;
地址定界
(1)空地址:對全文進行處理;
(2)單地址:
#:指定行; /pattern/:被此模式所匹配到的每一行;
(3)地址范圍
#,#: #,+#: #,/pat1/ /pat1/,/pat2/,
(4)步進:~
1~2:所有奇數行 2~2:所有偶數行
編輯命令:
d:刪除模式空間的內容 p:顯示模式空間的內容 a \text:在行后面追加文本"text",支持使用\n實現多行追加; i \text:在行前面插入文本text,支持使用\n實現多行插入; c \text:把匹配到的行替換為此處指定的文本"text"; w /PATH/TO/SOMEFILE:保存模式空間匹配到的至指定的文件中; sed -n '/^[^#]/w /tmp/fstab.new' /etc/fstab r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到行的后面;文件合并; =:為模式匹配到的行打印行號; ?。簵l件取反 格式:地址定界!編輯命令; s///:查找替換,其分隔符可自行執行,常用的有s@@@,s###等; 替換標記: g:全局替換; w/PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中; p:顯示替換成功的行;
例題演示:
1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符
[root@localhost ~]# sed -r 's@^[[:space:]]+@@g' /etc/grub2.cfg
2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符
[root@localhost ~]# sed -r 's@^#[[:space:]]+@@g' /etc/fstab # /etc/fstab Created by anaconda on Tue Aug 9 15:54:42 2016 # Accessible filesystems, by reference, are maintained under '/dev/disk' See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=e19b9af8-c954-40b3-a7bb-e13de38e741a / xfs defaults0 0 UUID=48da361a-392b-4f45-a126-4b51db7c407e /boot xfs defaults0 0 UUID=587df6c7-785b-4318-9aec-cc0c6a203dc9 /usrxfs defaults0 0 UUID=a3b743bf-9613-42bb-9728-7c73a1fdf752 swapswapdefaults0 0 [root@localhost ~]#
3、在/root/install.log每一行行首增加#號
[root@localhost ~]# sed 's@^@#@g' /etc/fstab # ## ## /etc/fstab ## Created by anaconda on Tue Aug 9 15:54:42 2016 ## ## Accessible filesystems, by reference, are maintained under '/dev/disk' ## See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info ## #UUID=e19b9af8-c954-40b3-a7bb-e13de38e741a / xfs defaults0 0 #UUID=48da361a-392b-4f45-a126-4b51db7c407e /boot xfs defaults0 0 #UUID=587df6c7-785b-4318-9aec-cc0c6a203dc9 /usrxfs defaults0 0 #UUID=a3b743bf-9613-42bb-9728-7c73a1fdf752 swapswapdefaults0 0 [root@localhost ~]#
4、在/etc/fstab文件中不以#開頭的行的行首增加#號
[root@localhost ~]# sed -r 's@^[^#]@#@g' /etc/fstab # # /etc/fstab # Created by anaconda on Tue Aug 9 15:54:42 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # #UID=e19b9af8-c954-40b3-a7bb-e13de38e741a / xfs defaults0 0 #UID=48da361a-392b-4f45-a126-4b51db7c407e /boot xfs defaults0 0 #UID=587df6c7-785b-4318-9aec-cc0c6a203dc9 /usrxfs defaults0 0 #UID=a3b743bf-9613-42bb-9728-7c73a1fdf752 swapswapdefaults0 0 [root@localhost ~]#
5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
[root@localhost ~]# echo "/etc/fstab" | sed -r 's@[^/]+/?$@@' /etc/ [root@localhost ~]# [root@localhost ~]# echo "/etc/fstab" | sed -r 's@^/[^/]+/?@@' fstab [root@localhost ~]#
6、利用sed取出ifconfig命令中本機的ipv4地址
[root@localhost ~]# ifconfig | sed -n '2p'| sed 's@^.*inet@@'|sed 's@netmask.*@@' 10.1.249.85 [root@localhost ~]#
7、統計centos安裝光盤中Package目錄下的所有rpm文件的以.分隔倒數第二個字段的重復次數。
[root@localhost Packages]# ls *.rpm|sed -r 's@.*\.(.*)\.rpm$@\1@'|sort|uniq -c 4 i686 919 noarch 2283 x86_64 [root@localhost Packages]#
sed命令的高級用法
高級編輯命令:
h:把模式空間中的內容覆蓋至保持空間中 H:把模式空間中的內容追加至保持空間中 g:從保持空間取出數據覆蓋至模式空間 G:從保持空間取出內容追加至模式空間 x:把模式空間中的內容與保持空間中的內容進行互換 n:讀取匹配到的行的下一行覆蓋至模式空間 N:追加匹配到的行的下一行至模式空間 d:刪除模式空間中的行 D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed
二、vim編輯器
vim:模式化的編輯器
基本模式: 編輯模式,命令模式 輸入模式 擴展命令行模式: 內置的命令行接口:
打開文件:
語法: #vim [options][file..]
+#:打開文件后,直接讓光標處于第#行的行首; +/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的行首;
模式轉換:
編輯模式:默認模式 編輯模式---->輸出模式: i:insert,在光標所在處輸入; a:append,在光標所在后方輸入 o:在光標所在處的下方打開一個新行; I:在光標所在行的行首輸入; A:在光標所在行的行尾輸入; O:在光標所在處的上方打開一個新行; 輸入模式------>編輯模式 ESC 編輯模式----->擴展命令行模式 : 擴展命令行模式---->編輯模式 ESC
關閉文件:
ZZ 保存并退出 :q 退出 :q! 強制退出,不保存此前的編輯操作 wq 保存并退出 :w :q :x 保存并退出; :w /PATH/TO/SOMEFIL
光標跳轉: 字符間跳轉 h:左 j:下 k:上 l:右 #COMMAND:跳轉由#指定的個數的字符; 單詞間跳轉 w:下一個單詞的刺手; e:當前或后一個單詞的詞尾 b:當前或前一個單詞的詞首行首行尾跳轉 ^:跳轉至行首的第一個非空白字符 0:跳轉至行首; $:跳轉至行尾
行間跳轉 #G:跳轉至由#指定的行; 1G,gg:第一行; G:最后一行
句間跳轉:
) (
段間跳轉
} {
翻屏:
ctrl+f:向文件尾翻一屏 ctrl+b:向文件首部翻一屏 ctrl+d:向文件尾部翻半屏 ctrl+u:向文件首部翻半屏 Enter:按行向后翻
vim編輯命令:
字符編輯: x:刪除光標所在處的字符; #x:刪除光標所在處起始的#個字符; xp:交換光標所在處的字符與其后面的字符的位置; 替換命令 r:替換光標所在處的字符 刪除命令: d:刪除命令,可結合光標跳轉字符,實現范圍刪除; dd:刪除光標所在處的行; #dd:刪除表表所處的行起始的共#行; 粘貼命令(p,put,paste): p:緩沖區中的內容如果為鄭航,則粘貼在當前光標所在行的下方;否則,則粘貼至當前光標所在處的后方; 復制命令(yank,y): y:復制,工作行為相似于d命令; yy:復制一整行 #yy:復制#行
改變命令(change,c)
編輯模式----->輸入模式,實現刪除操作 cc:刪除光標所在的行,并轉換為輸出模式;
vim擴展命令模式:
內建的命令行借口
(1)地址定界
:start_pos[,end_pos] #:特定的第#行,例如5即第5行; #,#:指定行范圍,左側為起始行,右側為結束行; #,+#:指定行范圍,左側為起始行絕對編號,右側為相對左側行號的偏移量; 例如:3,+7 %:全文 /pattern/:從光標所在處起始向文件尾部第一次被模式所匹配到的行; /pat1/,/pat2/:從光標所在處起始,第一次由pat1匹配到行行開始,至第一次由pat2匹配到的行結束之間的所有行; 可同編輯命令一同使用,實現編輯操作 d:刪除 y:復制 c:更改 w /PATH/TO/SOMEFILE:將范圍內的文本保存至指定的文件中; r /PATH/FROM/SOMEFILE:將指定的文件中的文本讀取并插入至指定位置
(2)查找
/PATTERN:從當前光標所在處向文件尾部查找能夠被當前模式匹配到的所有字符串; ?PATTERN:從當前光標所在處向文件首部查找能夠被當前模式匹配到的所有字符串; n:下一個,與命令方向相同 N:上一個,與命令方向相反
(3)查找并替換
s:擴展命令行的模式;使用格式; s/要查找的內容/替換為的內容/修飾符 要查找的內容:可使用正則表達式 替換為的內容:不能使用正則表達式,但可以引用; 如果“要查找的內容”部分在模式中使用分組符號:在"替換為的內容"中使用后向引用; l:忽略大小寫; g:全局替換,意味著一行中如果匹配到多次,則均替換;
可把分隔符替換為其他非常用字符
s@@@ s###
VIM的多文件功能:
多文件: vim FILE1 FILE2... 在文件間切換: :next 下一個 :prev 上一個 :first 第一個 :last 最后一個 退出所有文件: :wqall 保存所有文件并退出 :wall 保存所有文件 :qall 退出所有文件 多窗口: -o:水平分割窗口 -O:垂直分割窗口
在窗口間切換:ctrl+w,ARROW
注意:單個文件也可以分割為多個窗口進行查看:
ctrl+w:水平分割窗口 ctrl+w,v:垂直分割窗口
定制vim的工作特性:
注意:在擴展命令行模式下的設定,僅對當前vim進程有效;
永久有效:
全局:/etc/vimrc 用戶個人:~/.vimrc
1、行號
顯示:set number,簡寫為set nu 取消顯示:set nonumber,set nonu
2、括號匹配高亮
匹配:set showmatch,set sm 取消:set nosm
3、自動縮進
啟用:set al 禁用:set noal
4、高亮搜索
啟用:set hlsearch 禁用:set nohlsearch
5、語法高亮
啟用:syntax on 禁用:syntax off
6、忽略字符大小寫
啟用:set lc 禁用:set nolc 獲取幫助: :help :help subject
作業:
1、如何設置tab縮進為4個字符?
在.vimrc下設置:
set tabstop=4
2、復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log;
3、刪除/tmp/functions文件中所有以#開頭,且#后面至少有一個空白字符的行的行首的#號;
原創文章,作者:因為有你,如若轉載,請注明出處:http://www.www58058.com/32868