Sed命令


 

SED解析

如上圖。要注意的就有點

1 sed 后面的處理必須要加 ' '括起來才行

2 2,5意思就是2-5行

3 d,從解析的第二張圖可以得知,是刪除的意思。所以整句話的意思就是  刪除2-5行。所以結果如下圖,2-5行就刪除了。

新增同上,無非就是把d改成a,如圖:

如果我只想打印2-5行,我該如何操作呢?一般情況下都會如下圖所示

看到了么?這個命令的結果就是2-5行重復輸出了。為什么呢?好吧我們回頭看解析,解析圖第一張的第一行

-n  使用安靜模式。為什么呢?一般sed所有的sdin數據都會顯示,只有加上-n之后,sed特殊處理之后的數據才會被列出來。這就是為什么上圖2-5行重復的原因,首先他將2-5行全部列出來之后,在將sed處理之后的數據在打印一遍,這就造成了2-5行數據的重復。

那么我們使用-n模式試一下

,只列出了2-5行的數據。完美,不是么?

,利用sed命令來替換字符串,及搜選字符串

例:

1 查詢Ip 來進行操作。首先利用 /sbin/ifconfig 來查詢本地網絡連接的相關詳細信息,如下圖

2 利用grep上一個隨筆寫的正則表達式,來獲取ip那一行,也就是inet 192......那一行。

OK。 /sbin/ifconfig ens33 | grep 'inet'

結果出來兩行:

如何將inet6那一行給干掉呢。我第一個就是想到表達式$符,末尾嘛。可是查詢結果沒有內容。再仔細看,原來$是行的末尾。也就是末尾是什么的字符,學的不扎實的毛病出來了。

仔細看,inet后面有空格,inet6后面是6.那我們只要grep 'inet '就OK了么?測試一下,OK

通過上面三步,就將ip地址獲取到了。上面利用了正則表達式的相關內容

首先通過inet空格,將inet那一行取出來。

然后通過 sed 's/^.*innet //g'來講inet刪掉。理解一下里邊的內容

目的就是用后面的替換前面的。首先是s,替換。然后用//g來替換/^.*innet。然后我們再來理解一下/^.*innet 。首先一個轉義字符/,在grep中都是用單引號來括起來的。這里沒有單引號,用的是/轉義字符。這點要注意。后面的^頭部開始,有 . 一個字符或者*多個字符,一直讀到innet。意思就是獲取innet前面的所有的內容。 然后用//g來替代。/是一個轉義字符,轉義的是/g的/,意思就是空。 至於后面的/g是什么意思呢?書中沒有解釋,百度一下。找到了一個解釋,我覺得比較明白了。如下圖,連接地址https://www.cnblogs.com/yelang-lkg/p/5502744.html。

,加上g就是全匹配。如果里面有多個Ip 地址的話,加上/g,執行一次取一個,這樣循環往下取,如果不加/g,就只能獲得第一個Ip的匹配。

 

1 搜尋man。2 將注釋用空格替換  3 去掉空格。

這是書中的原例,對於這個例子。我們其實直接將注釋刪除就OK。不需要替換,估計是書中的特意演示。如下圖,操作一下

看到了沒,第一行的命令,執行的結果跟上圖是一樣的。

 

上面所有的實例都是用於屏幕輸出,而不是改變原文件。如果要改變原文件,只需要在前面所有輸出前面加上一個-i,后面再加上一個想要修改的文件就可以。

例:。畫框的三部分。

 

延伸正規表示法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM