文本處理工具-2

1、 sed 是一種行/流編輯器,它一次處理一行內容;處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space ),接著用sed 命令處理緩沖區中該行內容,處理完成后,把緩沖區的該行內容送往屏幕,接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出,Sed 可以用來自動編輯一個或多個文件。

2、 sed命令的用法(除非使用-i選項,不改變原文件內容)

1)、用法:sed [option]… 'script' inputfile…

2)、常用選項:

-n:不輸出模式空間所有行的自動打印,而腳本命令p打印模式空間中被腳本指定地址的行,又因為sed命令本身就默認輸出模式空間所有行的自動打印,所有-n選項和腳本命令p的同時使用就只打印模式空間中被腳本指定地址的行

     -e:多點編輯

     -f /PATH/TO/SCRIPT_FILE:從指定文件中讀取編輯腳本

     -r:支持使用擴展正則表達式

     -i:原處編輯

    例如#sed –i ‘/^U/r /etc/issue’ fi,屏幕無打印顯示,但是修改了原文件fi

    #sed –i ‘/^U/r /etc/issue’ fi

屏幕無打印顯示,修改了原文件fi,但是在當前目錄生成了fi原文件備份文件ffi.bak

3)、script(腳本)格式:'地址命令',必須同時包含地址和腳本命令,使用多個腳本命令,中間用;分開

script地址定界:

(1)不給地址:對全文進行處理(默認)

(2)單地址:

#:指定的行

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

(3)地址范圍:

#,#:從第#行到第#行

#,+#

/pat1/,/pat2/

#,/pat1/

(4)步進:用符號~表示

1~2  奇數行

2~2  偶數行

script編輯命令/腳本命令:

d: 刪除模式空間匹配的行,刪除的模式空間處理行不再在屏幕上顯示

p: 顯示模式空間中的內容

a \text:在行后面追加文本;支持使用\n 實現多行追加

i \text:在行前面插入文本;支持使用\n 實現多行插入

c \text:替換為單行或多行文本

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

r /path/from/somefile:讀取指定文件的文本至模式空間中匹配到的行后

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

!: 模式空間中匹配行取反處理

例如#cat /etc/fstab > fi

#sed ‘3d’ fi,屏幕打印顯示的fi文件內容的第三行被刪除,但是fi文件本身沒有改變

    #sed –n ‘3d’ fi,屏幕上無打印輸出

    #sed ‘3,6p’ fi,屏幕打印顯示且重復顯示3-6行

    #sed –n ‘3,6p’ fi,屏幕打印顯示3-6行

    #sed –n ‘1~2p’ fi,屏幕打印顯示奇數行

    #sed –n ‘/^U/p’ fi,屏幕打印顯示以U開頭的行

    #sed ‘/^U/a \xxhhjjkk’ fi,屏幕打印顯示且以U開頭的行后新行追加文本xxhhjjkk

    #sed ‘/^U/a \xxhhjjkk\nbbccddee\nrtrt’ fi

屏幕打印顯示且以U開頭的行后分三行分別追加文本xxhhjjkk、bbccddee、rtrt

#sed ‘/^U/w /testdir/U.txt’ fi

 #sed  -n ‘/^U/w /testdir/U.txt’ fi, 把文件fi中以U開頭的行存入文件/testdir/U.txt

#sed '/^U/=' fi,打印顯示fi文件中以U開頭的行的行號

#sed '/^U/!=' fi,打印顯示fi文件中非以U開頭的行的行號

4)、s///:查找替換, 支持使用其它分隔符,例如s@@@ ,s###

替換標記:

g:行內全局替換,如果不加g,則僅僅替代行中第一個模式匹配

p:顯示替換成功的行

w  /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

ffi文件內容:good good good

              xxhhjjkk                              god god god  

例如#sed ‘s/good/god/gp’ ffi,屏幕打印輸出結果是:god god god

                                                    xxhhjjkk

但是加上-n選項,輸出結果就是:god god god 

    #sed ‘s/good/god/gw /root/fffi’ffi,將替換成功的行保存在文件/root/fffi中

                                                  

5)、示例:

#sed –n ‘2,/root/p’ /etc/passwd  打印顯示第2行到第一個包含有root字符的行

#sed –n –e ‘/^$/p’ –e ‘/^$/=’ file 打印顯示空行及相應的行號(不打印白行及相應行號)

#sed ‘/^$/d’ file 打印顯示刪除所有空行,但是原文件沒有改變

#sed –n‘s/root/&superman/p’ /etc/passwd  ,第一個root字符串后添加superman

#sed –n‘s/root/superman&/p’ /etc/passwd  ,第一個root字符串前添加superman

#sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets,所有的dog字符串替換成cat字符串,同時

#sed –i.bak ‘s/dog/cat/g’ pets ,修改原文件時備份原文件為pets.bak

3、sed命令的高級編輯命令/高級腳本命令

1)、高級編輯命令:

其中模式空間相當于多工序加工車間,保持空間相當于臨時倉儲倉庫

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

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

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

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

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

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

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

d: 刪除模式空間中的行

D:刪當前模式空間中的行

2)示例:

#sed -n 'n;p' FILE,只打印顯示偶數行(不考慮n選項,起始自動讀第一行進入模式空間,然后判斷腳本命令n,讀取匹配到的第一行的下一行第二行覆蓋至模式空間,而后判斷腳本命令p,默認打印第一行第二行同時再次打印第二行;接著讀取第三行進入模式空間,然后判斷腳本命令n,讀取匹配到的第三行的下一行第四行覆蓋至模式空間,而后判斷腳本命令p,默認打印第三行第四行同時再次打印第四行;依次…;考慮n選項,默認打印不再輸出,所以只打印輸出偶數行)

   #sed '1!G;h;$!d' FILE,倒序排列,相當于#tac FILE(第一行不執行G,不是第一行就執行G,然后執行第二條命令h,最后一行不刪除,不是最后一行就刪除;起始自動讀第一行進入模式空間,然后判斷因為是第一行所以不執行G,接著執行第二條命令h,把模式空間中的第一行覆蓋至保持空間,然后判斷因為不是最后一行所以情況模式空間,也就不打印顯示第一行;第二行進入模式空間…)

   #sed '$!N;$!D' FILE,只留最后兩行,相當于#tail -2 FILE

   #sed '$!d' FILE, 只留最后一行,相當于#tail -1 FILE

   #sed ‘G’ FILE,在每行的后面加一空行

   #sed ‘g’ FILE,用空行覆蓋每一行

   #sed ‘/^$/d;G’ FILE, 刪除所有的空行,然后在每行后加一個空行

   #sed 'n;d' FILE,打印顯示奇數行

   #sed -n '1!G;h;$p' FILE倒序排列,相當于#tac FILE

 

原創文章,作者:18612763863,如若轉載,請注明出處:http://www.www58058.com/31896

(0)
1861276386318612763863
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • 用戶和組相關的配置文件

    目錄 l  用戶 l  組賬號 l  UID和GID號 l  /etc/passwd分析 l  /etc/shadow分析 l  /etc/group分析 l  /etc/gshadow分析 l  通過用戶和用戶組配置文件來查詢或管理用戶 l  總結 1、用戶(User…

    Linux干貨 2016-10-23
  • 探索這個“男人”

    一、前言 正所謂了解一個命令就得了解他的用法,正好是要了解一個人就得了解他的興趣愛好,處事態度以及為人是怎么樣的。 二、man是什么 man – an interface to the on-line reference manuals Man是manual(手冊)的縮寫,使用權限是所有用戶,man命令提供為linux系統在線提供了很好的幫助手冊…

    Linux干貨 2016-05-03
  • awk命令詳解

    簡介: wak是一個強大的文本分析工具,也可以叫做報告生成工具。相對于grep的查找,sed的編輯,awk在對其數據分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格 為默認分隔符將每行切片,切開的部分再進行各種分析處理。 awk有三個不同的版本:awk,nawk,gawk。我們目前所使用的awk一般指gawk,gawk是AWK和GN…

    Linux干貨 2016-11-28
  • 邏輯卷小結

    邏輯卷 邏輯卷:把不同大小的物理設備,抽象成一個完整的文件系統,方便對物理設備的管理與應用。 其基本步驟為: 1.將指定的設備設置為物理卷     物理卷是指定大小的固定得物理區域 2.用一個或者多個物理卷創建一個卷組 3.創建邏輯卷     在物理卷上創建的邏輯卷由物理區域組成…

    Linux干貨 2016-09-01
  • N25-第11周博客作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 第一步:他們需要實現協商好對稱加密算法,單向加密算法,公鑰加密算法,交換公鑰等。 第二步:B用戶想要將數據傳給A,首先需要使用單向加密算法取出數據的特征碼,并用自己的私鑰對這段特征碼進行加密(數字簽名),B用戶生成臨時對稱密鑰,并用對稱密鑰加密整段數據,B用戶使用 A用戶的公鑰加密一次性對稱密鑰,附加在整段數據…

    Linux干貨 2017-05-21
  • ansible學習筆記

    簡介:  在日常服務器維護中,從系統安裝到程序部署再到發布應用,在大規模的生產環境中,如果需要手動的每臺服務器進行安裝配置將會給運維人員帶來許多繁瑣而又重復的工作。這就促使了在每個運維層次中出現了不同的自動化運維工具。 常見的自動化運維工具分類有以下幾類:  系統安裝運維工具(OS Provisioning):    …

    Linux干貨 2015-08-17
欧美性久久久久