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
下一篇 2016-08-15

相關推薦

  • Linux獲取幫助的途徑、history命令及文件系統結構

        在學習Linux的過程中,往往會遇到一些難以理解的問,這時我們就需要尋求幫助,下面是獲取幫助的幾個途徑。 一、man(manual)手冊(命令) 1、man手冊介紹 (1)man手冊是系統自帶的聯機幫助手冊,善于利用man命令,可以幫我們解決遇到的大部分問題。 (2)man手冊分為九個章節,每個章節是獨立的。 章節1:表…

    Linux干貨 2016-07-29
  • linux 文本處理工具 grep cut sort等

    linux day 7 間歇性回憶 自動屬于這個組 是  SGID 的功能 chmod g+s /data/testdir setfacl —m g:g2:rwx /data/testdir setfacl -m b:g:g2:rwx /data/testdir setfacl -m d:g:g3:r testdir chmod o= testdi…

    Linux干貨 2016-08-08
  • proxy_pass轉發路徑

    一、引言 在nginx中配置proxy_pass時,proxy_pass后面的路徑最后面加“/”和不加“/”會有所區別。加“/”時,nginx不會代理location部分,不加“/”時,nginx會同時代理location部分。下面通過實驗來證明。 二、實驗 實驗環境簡要說明:     node1為httpd服務器(1…

    Linux干貨 2017-01-12
  • 關于文件系統備份、交換分區掛載等–中

    dd命令:convert and copy a file 用法: dd if=/PATH/FROM/SRC of=/PATH/TO/DEST  bs=#:block size, 復制單元大小 count=#:復制多少個bs  of=file 寫到所命名的文件而不是到標準…

    Linux干貨 2016-08-29
  • 數據結構- 串的模式匹配算法:BF和 KMP算法

    Brute-Force算法的思想 1.BF(Brute-Force)算法   Brute-Force算法的基本思想是: 1) 從目標串s 的第一個字符起和模式串t的第一個字符進行比較,若相等,則繼續逐個比較后續字符,否則從串s 的第二個字符起再重新和串t進行比較。 2) 依此類推,直至串t 中的每個字符依次和串s的一個連續的字符序列相等,則稱模式匹…

    Linux干貨 2015-04-07
  • 查找與壓縮

    文件查找 在文件系統上查找符合條件的文件; ? 文件查找:locate, find locate :非實時查找(數據庫查找) find :實時查找 locate 1.查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db ? 2.依賴于事先構建的索引,索引的構建是在系統較為空閑時自動進行(周期性任務);管理需要員手動更新數據庫…

    Linux干貨 2016-08-22
欧美性久久久久