上古神器之vim

sed

前言:前面學到了文本處理三劍客之一grep,但是grep在有些時候顯得力不從心,我們需要一款針對行操作的處理工具,沒錯,這就是sed流編輯器。


sed.png


sed用法提煉:
sed 's/(text1)(text2)(text3)/\1\2\3/'




 vim

前言:強大的Linux如果沒有一款瘋狂的編輯器,常用的編輯操作會不會力不從心?今天本文介紹的就是上古神器vim的各種操作,盡管 Vim 已經是古董級的軟件,但還是有無數新人迎著困難去學習使用,可見其經典與受歡迎程度。另外,由于 Vim 的可配置性非常強,各種插件、語法高亮配色方案等多不勝數,無論作為代碼編輯器或是文稿撰寫工具都非常給力……

vim.png


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

(0)
M20-1--孔祥文M20-1--孔祥文
上一篇 2016-08-12
下一篇 2016-08-12

相關推薦

  • 文本處理三劍客之grep

    grep命令基本用法 1、grep正則表達式(對文本行進行搜索過濾) 格式:grep [option] PATTERN [FILE…] option: -i:忽略大小寫 -v:取反,顯示未被匹配到的pattern -n:顯示匹配的行號 -c:統計匹配的行數 -o: 只顯示匹配到的pattern -q: 靜默,不予顯示 -A#:after,匹配到的行再向后…

    Linux干貨 2017-07-19
  • N25 第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 2、編輯/etc/group文件,添加組hadoop。 3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop。 4、復制/etc/sk…

    Linux干貨 2017-01-04
  • LNMP 增加memcached緩存系統 構建LNMMP

    摘抄百度百科 memcache 的解讀 memcache是一套分布式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用以提升網站的訪問速度,尤其對于一些大型的、需要頻繁訪問數據庫的網站訪問速度提升效果十分顯著[1]  。這是一套開放源代碼軟件,以BSD license授權發布。 MemCa…

    Linux干貨 2016-09-19
  • 7月21號:CentOS6.8(及7)基礎配置項+Linux入門(1)

    7月21號,馬哥第二天,主要內容有三個部分:一、基本命令復習二、CentOS6.8(及7)基礎配置項;三、linux入門(1) 一、基本命令復習    ls         查看文件內容  l查看文件詳細信息  -a顯示包含隱藏文…

    Linux干貨 2016-08-05
  • 難搞的grep、find練習題

    馬哥教育網絡班21期-第五周博客作業 1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@caicai ~]# grep –color "^[[:space:]]\+" /boot/grub/grub.conf    …

    Linux干貨 2016-07-26
  • vim學習

    vim學習 認識與介紹   vim是一款linux下查看編輯文本文件的一款文本編輯器。一般用來查看修改配置文件、日志文件等文本類文件。 打開文件   vim [OPTIONS] [FILE …]     +#: 打開文件后,直接讓文件處于第#行     +/…

    Linux干貨 2016-10-09
欧美性久久久久