sed命令的用法和vim編輯器的使用

一、文本處理工具sed

sed [option]….'script] [input-file]…

簡介: sed是一種流編輯器,他一次處理一行的內容,處理時把當前處理的行存儲在臨時緩沖區中,這個緩沖區被稱為模式空間,接著用sed命令處理,處理完成后把模式空間的內容送往屏幕,接著處理下一行,知道文件末尾,而文件的內容并沒有改變。模式空間相當于sed的加工廠,除此以外,還有保持空間,用于臨時存儲數據。

sed的工作原理圖

sed命令的用法和vim編輯器的使用

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;

blob.png

blob.png

3、刪除/tmp/functions文件中所有以#開頭,且#后面至少有一個空白字符的行的行首的#號;

blob.png

blob.png

原創文章,作者:因為有你,如若轉載,請注明出處:http://www.www58058.com/32868

(0)
因為有你因為有你
上一篇 2016-08-15 14:31
下一篇 2016-08-15 14:31

相關推薦

  • python第二周

    #python數據結構(list) ## 分類 數值型:int、float、complex、bool 序列對象:字符串 str ? 列表 ?list ? 元組 ?tuple 鍵值對: 集合 set ? 字典 dict   ## 數字的處理函數 math.e ?math.pi: 自如常數和π round(): ?四舍六入五去偶 floor(): ?取…

    Linux干貨 2017-09-23
  • Linux 作業

    1.       描述計算機的組成及其功能。 答:CPU、I/O、存儲器; CPU:由運算器和控制器組成;運算器主要功能是對數據進行各種運算,除了進行常規計算外還能進行邏輯運算以及數據的比較、移位等操作??刂破魇钦麄€計算機系統的控制中心,它指揮計算機各部分協調地工作,保證計算機按照預先規定的目標和步…

    Linux干貨 2016-10-29
  • linux 常用命令

    linux   常用命令:      pwd: printing working directory                     顯示工作目錄       cd:cha…

    Linux干貨 2016-10-28
  • cp復制軟鏈接失效的原因

    在學習cp命令時我們會知道復制軟鏈接時,如果要保留鏈接文件使用-d,但當我們實際操作時卻常常出現如下情況 [root@localhost ~]# ls -l /etc/redhat-release     #此文件為鏈接文件 lrwxrwxrwx. …

    Linux干貨 2016-10-25
  • tomcat

    編程語言: 硬件級:微碼編程,匯編語言 系統級:C,C++,… 應用級:Java, PHP, Python, Ruby, Perl, C#, … 程序:指令+數據 過程式編程:以指令為中心,數據服務于代碼; 對象式編程:以數據為中心,指令服務于數據; java Java代碼的運行:*.java(source code) –…

    Linux干貨 2017-07-03
  • shell變量的淺談

    變量本質上是存儲數據的一個或多個計算機內存地址,變量的命令規則包括: 1) 不能使用程序中的保留字,如if, for 2) 變量由字母、下劃線和數字組成,且不能以數字開頭 3) 要求風名知義 4) 統一命名規則:駝峰命名法 變量主要分為本地變量、環境變量、局部變量、位置變量和特殊變量 (1)本地變量:只對當前shell…

    2017-08-05
欧美性久久久久