sed
前言:前面學到了文本處理三劍客之一grep,但是grep在有些時候顯得力不從心,我們需要一款針對行操作的處理工具,沒錯,這就是sed流編輯器。
sed用法提煉: sed 's/(text1)(text2)(text3)/\1\2\3/'
vim
前言:強大的Linux如果沒有一款瘋狂的編輯器,常用的編輯操作會不會力不從心?今天本文介紹的就是上古神器vim的各種操作,盡管 Vim 已經是古董級的軟件,但還是有無數新人迎著困難去學習使用,可見其經典與受歡迎程度。另外,由于 Vim 的可配置性非常強,各種插件、語法高亮配色方案等多不勝數,無論作為代碼編輯器或是文稿撰寫工具都非常給力……
vim之此處文檔dilimiter
vim編輯器需要用戶傳遞各種編輯參數和編輯內容,使用輸入重定向將參數傳遞給vim編輯器,結合特定組合鍵,就能完成編輯操作。有如下腳本
#!/bin/bash vim /tmp/text <<EOF #創建文件/tmp/text,設置文本開始標識,等待參數傳入 i #進入插入模式 The first line #編輯文本 The second line ^[ #特殊組合鍵,Ctrl+v-->ESC 回到命令行模式 ZZ #保存文件且退出 EOF ---------------------------------- Vim: 警告: 輸入不是來自終端(鍵盤) The first line The second line "/tmp/text" [新] 4L, 33C 已寫入 [root@ _209_ ~]#
雖然實現了把數據寫入文件,但還是不推薦這種寫法,不過需要接受參數的命令,可以借鑒類似的做法。
vim小試牛刀
1、如何設置tab縮進為4個字符
:set tabstop=4
2、復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log
[root@ _2_ ~]# cp /etc/rc.d/init.d/functions /tmp [root@ _3_ ~]# vim /tmp/functions :%s@/etc/sysconfig/init@/var/log@g 3 次替換,共 3 行 ... if [ -f /var/log ]; then . /var/log else # This all seem confusing? Look in /var/log, ...
3、刪除/tmp/functions文件中所有以#開頭,且#后面至少有一個空白字符的行的行首的#號
~]# vim /tmp/function :%s@^#\([[:space:]]\+.*\)@\1@g A sed expression to filter out the files that is_ignored_file recog nizes __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmori g\|\.rpmsave\)$/d' if [ "$_use_systemctl" = "1" ]; then
4、復制/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符
[root@ _4_ ~]# cp /etc/profile /tmp/ [root@ _5_ ~]# vim /tmp/profile :%s/^[[:space:]]\+//g if [ "${-#*i}" != "$-" ]; then . "$i" else . "$i" >/dev/null fi fi done unset i unset -f pathmunge 33 次替換,共 33 行
5、復制/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令為/tmp/functions的每行開頭為空白字符的行的行首添加一個#號
[root@ _7_ ~]# cp /etc/init.d/functions /tmp/functions [root@ _8_ ~]# vim /tmp/functions :%s/^[[:space:]].*/#&/ # "x$1" = xforce-reload -o \ # "x$1" = xcondrestart ] ; then # systemctl_redirect $0 $1 # exit $? # fi fi 443 次替換,共 443 行
sed大展身手
6、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符
[root@ _11_ ~]# sed -r 's/^[[:space:]]+(.*)/\1/' /etc/grub2.cfg
7、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符
刪除前: [root@ _8_ ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Tue Jul 19 22:27:09 2016 刪除后: [root@ _7_ ~]# sed -r 's/^#[[:space:]]+(.*)/\1/' /etc/fstab # /etc/fstab Created by anaconda on Tue Jul 19 22:27:09 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
8、在/root/install.log每一行行首增加#號
[root@ _12_ ~]# sed 's/.*/#&/' initial-setup-ks.cfg ##version=DEVEL ## X Window System configuration information #xconfig --startxonboot ## License agreement #eula --agreed ## System authorization information
9、在/etc/fstab文件中不以#開頭的行的行首增加#號
[root@ _13_ ~]# sed -e 's/^[^#].*$/#&/' -e 's/^$/#&/' /etc/fstab # # # /etc/fstab # Created by anaconda on Tue Jul 19 22:27:09 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=a7717433-0d0f-4126-8eff-2e41361cea79 /
10、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
取目錄名: echo "/etc/fstab" |sed -r 's#[^/]+/?$##g'|sed -r's#(.+)/#\1#' /etc 取基名: [root@ _55_ ~]# echo "/etc/fstab/" |sed -r 's#/#\n#g'|sed -rn -e "/^[^[:space:]]/p"|sed -n '$p' fstab 一起?。? [root@ _160_ ~]# echo "/etc/fstab" |sed -r "s#(.*/)([^/]+/?$)#\1#" \2
11、利用sed 取出ifconfig命令中本機的IPv4地址
[root@ _164_ ~]# ifconfig|sed -n '2p' |sed -r 's/.*inet (.*) netmask.*/\1/' 192.168.33.200
12、統計centos安裝光盤中Package目錄下的所有rpm文件的以.分隔倒數第二個字段的重復次數
[root@ _187_ ~]# ls /mnt/Packages/ |sed -n '/.rpm$/p'|sed -r 's/.*\.([^\.]+)\.rpm$/\1/'|sort|uniq -c 2000 i686 2938 noarch 4069 x86_64
原創文章,作者:M20-1--孔祥文,如若轉載,請注明出處:http://www.www58058.com/32452