第9章 文本處理工具sed

筆記整理開始時間:2018年4月17日08:45:48html

 

更多內容請點擊:正則表達式

Linux學習從入門到打死也不放棄,徹底筆記整理(持續更新,求收藏,求點贊~~~~) 
centos

http://www.javashuo.com/article/p-viilhgyh-vk.html
編輯器


第9章 文本處理工具sedide

 

本章內容工具

        sed介紹學習

        sed用法centos7

        sed高級用法spa

        

文本處理工具sed3d

        Stream EDitor,行編輯器

        又稱流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時

        緩衝區,稱爲"模式空間"(pattern space),接着用sed命令處理緩衝區中

        的內容,處理完成後,把緩衝區的內容送往屏幕。而後讀入下一行,執行下

        一個循環。

        若是沒有使用諸如「D」的特殊命令,那會在兩個循環之間清空模式空間,但不

        會清空保留空間。這樣不斷重複,直到文件末尾。文件內容並無改變,除非

        你使用重定向存儲輸出。

        功能:

               主要用來自動編輯一個或多個文件,簡化對文件的反覆操做,編寫轉換程序等

        參考:http://www.gnu.org/software/sed/manual/sed.html

        

sed用法:

        sed [option]..'script' inputfile..

        經常使用選項:

               -n           不輸出模式空間內容到屏幕,即不自動打印

               -e           多點編輯

               -f /path/scipt_file           從指定     文件中讀取編輯腳本

               -r           使用擴展的正則表達式

               -i.bak:     備份文件並原處編輯

        scrip:

               '地址命令'              地址+命令

 

地址定界:

        不給地址:對全文進行處理

        單地址:

               #:指定的行,

               $:最後一行

               /pattern/: 被此處模式所可以匹配到的每一行

        地址範圍:

               #,#         第#行到第#行到第#行

               #,+@    第#行到第#+@行

               /pat1/,/par2/  匹配part1的行到匹配part2的行

               #,/part/        第#行到匹配part的行

               ~:步進

                     1~2       奇數行

                     2~2        偶數行

                    

編輯命令:

               d             刪除模式空間匹配的行,並當即啓用下一輪循環

               p             打印當前模式空間內容,追加到默認輸出以後

               a[\]text:   在指定行後面追加文本

                                    支持使用\n實現多行追加

               i[\]text:    在指定行前面插入文本

               c[\]text:   替換行尾單行或多行文本

               w /path/somefile:   保存模式匹配的行至指定文件

               r /path/somefile:    讀取指定文件的文本至模式空間中

                                                  匹配到的行後

               =:                爲模式空間中的行打印行號

 

查找替換:

        s///: 查找替換,支持使用其餘分隔符,s@@@,s###

        替換標記:

               g:行內全局替換

               p:顯示替換成功的行

               w /pash/to/somefile:     將替換成功的行保存至文件中

        -n   pgw file  全局替換且打印匹配行 並保存匹配行至文件

               

sed 示例:

        sed '2p' /etc/passwd             

        sed -n '2p' /etc/passwd

        sed -n '1,4p' /etc/passwd

        sed -n '2,/root/p'    /etc/passwd

        sed -n -e '/^$/p' -e '/^$/=' file   sed -n '/^$/p;/^$/=' file

        sed '/root/a\hello' /etc/passwd

        sed '/root/i\hello' /etc/passwd

        sed '/root/c\hello' /etc/passwd

        

        sed '/^$/d' file                     刪除空行

        sed '/1,10d' file    

        nl /etc/passwd |sed '2,5d'                   nl = cat -b  非空行編號    

        nl /etc/passwd |sed '2a tea'   行後插入tea

        sed 's/test/mytest/g' file      全文查找替換

        sed -n 's/root/&superman&/p'    /etc/passwd        添加替換  &引用原文

        sed -e  's/dog/cat/' -e 's/hi/lo/'  pets

        sed -i.bak 's/dog/cat/g'        pets

        

高級編輯命令:

        P     打印模式空間開端至\n內容,並追加到默認輸出以前

        h     把模式空間中的內容覆蓋至保持空間中

        H     把模式空間中的內容追加至保持空間中

        g     從保持空間取出數據覆蓋至模式空間

        G     從保持空間取出內容追加至模式空間

        x       把模式空間中的內容與保持空間中的內容進行替換

        n     讀取匹配到的行的下一行覆蓋至模式空間

        N     讀取匹配到的行的下一行追加至模式空間

        d     刪除模式空間中的行

        D      若是模式空間中包含換行符,則刪除知道第一個換行符的模式空間中的文本,

               並不會讀取新的輸入行,而使用合成的模式空間從新啓動循環。若是模式空間

               不包含換行符,則會像發出d命令那樣啓動正常的新循環

 

        H h爲存 G g 爲取  如沒有存,則取爲空行

        

                    

示例:

        sed -n 'n;p'file       打印偶數行

        sed '1!G;h;$!d'               漢諾塔   倒序顯示   至關於 tac

        sed 'N;D' file          只顯示了最後一行至關於 sed -n '$p' f1

        sed '$!N;$!D' file    顯示了最後兩行

        sed '$!d' file          顯示了最後一行

        sed 'G' file              每一行後都加上空行

        sed '/part/g' file     指定行替換爲空行

        sed '/^$/d;G' file 刪除空行以後每一行以後都加空行

        sed 'n;d' file           刪除偶數行(只顯示奇數行)

        sed 'n;n;d'      file   刪除3的倍數行,從第3行開始

               sed '1~3d' file        從第1行開始,隔2行刪除1行

               

        

        

        顯示奇數行     

               seq 10 | sed '2~2d'

               seq 10 | sed -n '1~2p'

               seq 10 | sed 'n;d'

        

        顯示偶數行

               seq 10 | sed '1~2d'

               seq 10 | sed -n '2~2p'

               seq 10 | sed -n 'n;p'

        

 

練習:

        1,刪除centos7系統/etc/grub2.cfg 文件中全部以空白開頭的行行首的空白

        字符

               cat /etc/grub2.cfg | sed -r 's/^[[:space:]]+(.*)$/\1/'

        2. 刪除/etc/fstab 文件中全部以#開頭,後面至少跟一個空白字符的行的行首

        的#和空白字符

               cat /etc/fatab |sed -r 's/^#[[:space:]]+(.*)$/\1/'

        3. 在centos6系統/root/install.log每一行行首增長#號

               cat /root/install.log | sed -r 's/.*/#&/'

        4. 在/etc/fstab 文件中不以#開頭的行的行首增長#號

               cat /etc/fstab |sed -r 's/^[^#].*/#&/'

        5. 處理/etc/fstab路徑,使用sed命令取出其目錄名和基名

               basename:

                     echo /etc/fstab |sed -r  's#.*/([^/]+/?)#\1#' 

               dirname

                     echo /etc/fstab |sed -r  's#^(.*/)\<.*#\1#'

        6. 利用sed 取出ifconfig命令中本機的ipv4地址

               ifconfig |sed -n -r '2s/.*inet\ (.*)\ netmask.*/\1/p'

        7. 統計centos安裝光盤中Package目錄下的全部rpm文件的以.分隔倒數第二個

        字段的重複次數

               ls |sed -r 's/.*\.([^.]+)\.rpm/\1/' |sort|uniq -c|sort -nr

        8.統計/etc/init.d/functions文件中每一個單詞的出現次數,並排序(用grep

        和sed兩種方法分別實現)

        sed方式:

               cat /etc/init.d/functions|sed -r 's/[^[:alpha:]]/\n/g'|sed -r '/^$/d'|sed  -r '/^.$/d'|sort|uniq -c|sort -nr

                     總單詞數:1747 (一個字母不算單詞)

               cat /etc/init.d/functions|sed -r 's/[^[:alpha:]]/\n/g'|sed -r '/^$/d'|sed  -r '/^[^ai]$/d'|sort|uniq -c |sort -n        

                     總單詞數:1774    除開a i 以外單字母不算單詞

               cat /etc/init.d/functions|sed -r 's/[^[:alpha:]]/\n/g'|sed -r  '/^$/d'|sort|uniq -c |sort -n

                     總單詞數:1994 單個字母也算單詞       

        grep方式:

               cat /etc/init.d/functions|grep -Eoi '[[:alpha:]]+'|sort|uniq -c|sort  -n

                     總單詞數:1994

               

        9.將文本文件的n和n+1行合併爲1行,n爲奇數行

               sed -n 'N;s/\n/ /' f1

               cat f1 |xargs -n2

 

               

               

筆記整理完成時間:2018年4月20日14:06:12

相關文章
相關標籤/搜索