上古神器之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 14:45
下一篇 2016-08-12 14:45

相關推薦

  • linux運維

    linux運維大綱,學習路線圖

    Linux干貨 2017-10-21
  • 第四周博客作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 ~]# cp -r /etc/skel /home/tuser1 ]# chmod -R 700 /home/tuser1/ 2、編輯/etc/group文件,添加組hadoop ~]# echo "hadoop:…

    Linux干貨 2016-12-14
  • 網絡配置管理:ifcfg、iproute2和ss等相關命令介紹(不完整,需要后期完善)

    網絡配置管理:ifcfg、iproute2和ss等相關命令介紹 ifcfg家族: ifconfig [interface] ifconfig interface [aftype] options | address …   -a :查看所有 接口信息 add<地址>:設置網絡設備IPv6的ip地址 del<地址>…

    Linux干貨 2017-01-19
  • N26-第二周博客作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。    查看類    pwd : print name of current/working directory  打印當前工作目錄;        &n…

    Linux干貨 2017-02-17
  • 進程管理之進程基礎及操作命令

    進程管理 今天我們開始講進程管理的相關知識,進程是學習LInux系統的重要一節內容,不僅能更幫助我們了解LInux系統的原理組成,又能方便我們在平常運維工作中的管理工作,幫助我們故障排查.希望大家牢固的掌握進程知識. 以下是我們分享的內容: 概論 進程控制 進程管理工具 概論 程序執行: 多道程序的執行分為順序執行和并發執行 程序順序執行時的特征: &nbs…

    Linux干貨 2016-09-07
  • 107-tomcat

    一.編程語言基礎  1.1 編程語言: 硬件級:微碼編程,匯編語言 系統級:C,C++,…

    2016-12-02
欧美性久久久久