日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sed命令使用详解

發布時間:2025/6/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sed命令使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[root@www?~]#?sed?[-nefr]?[動作] 選項與參數:-n?:使用安靜(silent)模式。在一般?sed?的用法中,所有來自?STDIN?的數據一般都會被列出到終端上。但如果加上?-n?參數后,則只有經過sed?特殊處理的那一行(或者動作)才會被列出來。-e?:直接在命令列模式上進行?sed?的動作編輯;-f?:直接將?sed?的動作寫在一個文件內,?-f?filename?則可以運行?filename?內的?sed?動作;-r?:sed?的動作支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法)-i?:直接修改讀取的文件內容,而不是輸出到終端。動作說明:?[n1[,n2]]functionn1,?n2?:不見得會存在,一般代表『選擇進行動作的行數』,舉例來說,如果我的動作是需要在?10?到?20?行之間進行的,則『?10,20[動作行為]?』function: a?:新增,?a?的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~ c?:取代,?c?的后面可以接字串,這些字串可以取代?n1,n2?之間的行! d?:刪除,因為是刪除啊,所以?d?后面通常不接任何咚咚; i?:插入,?i?的后面可以接字串,而這些字串會在新的一行出現(目前的上一行); p?:列印,亦即將某個選擇的數據印出。通常?p?會與參數?sed?-n?一起運行~ s?:取代,可以直接進行取代的工作哩!通常這個?s?的動作可以搭配正規表示法!例如?1,20s/old/new/g?就是啦!

?

以行為單位的新增/刪除


將 /etc/passwd 的內容列出并且列印行號,同時,請將第 2~5 行刪除!

[root@www?~]#?nl?/etc/passwd?|?sed?'2,5d'1?root:x:0:0:root:/root:/bin/bash6?sync:x:5:0:sync:/sbin:/bin/sync7?shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown .....(后面省略).....


sed 的動作為 '2,5d' ,那個 d 就是刪除!因為 2-5 行給他刪除了,所以顯示的數據就沒有 2-5 行羅~ 另外,注意一下,原本應該是要下達 sed -e 才對,沒有 -e 也行啦!同時也要注意的是, sed 后面接的動作,請務必以 '' 兩個單引號括住喔!

只要刪除第 2 行

nl?/etc/passwd?|?sed?'2d'

?

要刪除第 3 到最后一行

?nl?/etc/passwd?|?sed?'3,$d'

?

在第二行后(亦即是加在第三行)加上『drink tea?』字樣!

[root@www?~]#?nl?/etc/passwd?|?sed?'2a?drink?tea'1?root:x:0:0:root:/root:/bin/bash2?bin:x:1:1:bin:/bin:/sbin/nologin drink?tea3?daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(后面省略).....

?

那如果是要在第二行前

?nl?/etc/passwd?|?sed?'2i?drink?tea'

?

如果是要增加兩行以上,在第二行后面加入兩行字,例如『Drink tea or .....』與『drink beer?』

[root@www?~]#?nl?/etc/passwd?|?sed?'2a?Drink?tea?or?......\>?drink?beer??'1?root:x:0:0:root:/root:/bin/bash2?bin:x:1:1:bin:/bin:/sbin/nologin Drink?tea?or?...... drink?beer??3?daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(后面省略).....

每一行之間都必須要以反斜杠『 \ 』來進行新行的添加喔!所以,上面的例子中,我們可以發現在第一行的最后面就有 \ 存在。


以行為單位的替換與顯示


將第2-5行的內容取代成為『No 2-5 number』呢?

[root@www?~]#?nl?/etc/passwd?|?sed?'2,5c?No?2-5?number'1?root:x:0:0:root:/root:/bin/bash No?2-5?number6?sync:x:5:0:sync:/sbin:/bin/sync.....(后面省略).....


透過這個方法我們就能夠將數據整行取代了!

?

僅列出 /etc/passwd 文件內的第 5-7 行

[root@www?~]#?nl?/etc/passwd?|?sed?-n?'5,7p'5?lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6?sync:x:5:0:sync:/sbin:/bin/sync7?shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

可以透過這個 sed 的以行為單位的顯示功能, 就能夠將某一個文件內的某些行號選擇出來顯示。

?

數據的搜尋并顯示

搜索 /etc/passwd有root關鍵字的行

nl?/etc/passwd?|?sed?'/root/p'1??root:x:0:0:root:/root:/bin/bash1??root:x:0:0:root:/root:/bin/bash2??daemon:x:1:1:daemon:/usr/sbin:/bin/sh3??bin:x:2:2:bin:/bin:/bin/sh4??sys:x:3:3:sys:/dev:/bin/sh5??sync:x:4:65534:sync:/bin:/bin/sync....下面忽略

如果root找到,除了輸出所有行,還會輸出匹配行。

?

使用-n的時候將只打印包含模板的行。

nl?/etc/passwd?|?sed?-n?'/root/p'1??root:x:0:0:root:/root:/bin/bash

?

數據的搜尋并刪除

刪除/etc/passwd所有包含root的行,其他行輸出

nl?/etc/passwd?|?sed??'/root/d'2??daemon:x:1:1:daemon:/usr/sbin:/bin/sh3??bin:x:2:2:bin:/bin:/bin/sh....下面忽略 #第一行的匹配root已經刪除了

?

?

?

數據的搜尋并執行命令

找到匹配模式eastern的行后,

搜索/etc/passwd,找到root對應的行,執行后面花括號中的一組命令,每個命令之間用分號分隔,這里把bash替換為blueshell,再輸出這行:

??/etc/?|??-n

如果只替換/etc/passwd的第一個bash關鍵字為blueshell,就退出

nl?/etc/passwd?|?sed?-n?'/bash/{s/bash/blueshell/;p;q}'????1??root:x:0:0:root:/root:/bin/blueshell

最后的q是退出。

?

數據的搜尋并替換

除了整行的處理模式之外, sed 還可以用行為單位進行部分數據的搜尋并取代。基本上 sed 的搜尋與替代的與 vi 相當的類似!他有點像這樣:

sed?'s/要被取代的字串/新的字串/g'

?

先觀察原始信息,利用 /sbin/ifconfig 查詢 IP

[root@www?~]#?/sbin/ifconfig?eth0 eth0?Link?encap:Ethernet?HWaddr?00:90:CC:A6:34:84inet?addr:192.168.1.100?Bcast:192.168.1.255?Mask:255.255.255.0inet6?addr:?fe80::290:ccff:fea6:3484/64?Scope:Link UP?BROADCAST?RUNNING?MULTICAST?MTU:1500?Metric:1.....(以下省略).....


本機的ip是192.168.1.100。

?

將 IP 前面的部分予以刪除

[root@www?~]#?/sbin/ifconfig?eth0?|?grep?'inet?addr'?|?sed?'s/^.*addr://g'192.168.1.100?Bcast:192.168.1.255?Mask:255.255.255.0

接下來則是刪除后續的部分,亦即:?192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

將 IP 后面的部分予以刪除

[root@www?~]#?/sbin/ifconfig?eth0?|?grep?'inet?addr'?|?sed?'s/^.*addr://g'?|?sed?'s/Bcast.*$//g'192.168.1.100

?

多點編輯

一條sed命令,刪除/etc/passwd第三行到末尾的數據,并把bash替換為blueshell

nl?/etc/passwd?|?sed?-e?'3,$d'?-e?'s/bash/blueshell/'1??root:x:0:0:root:/root:/bin/blueshell2??daemon:x:1:1:daemon:/usr/sbin:/bin/sh

-e表示多點編輯,第一個編輯命令刪除/etc/passwd第三行到末尾的數據,第二條命令搜索bash替換為blueshell。

?

?

直接修改文件內容(危險動作)


sed 可以直接修改文件的內容,不必使用管道命令或數據流重導向! 不過,由於這個動作會直接修改到原始的文件,所以請你千萬不要隨便拿系統配置來測試! 我們還是使用下載的 regular_express.txt 文件來測試看看吧!

利用 sed 將 regular_express.txt 內每一行結尾若為 . 則換成 !

[root@www?~]#?sed?-i?'s/\.$/\!/g'?regular_express.txt

?

利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』

[root@www?~]#?sed?-i?'$a?#?This?is?a?test'?regular_express.txt

由於 $ 代表的是最后一行,而 a 的動作是新增,因此該文件最后新增『# This is a test』!

sed 的『 -i 』選項可以直接修改文件內容,這功能非常有幫助!舉例來說,如果你有一個 100 萬行的文件,你要在第 100 行加某些文字,此時使用 vim 可能會瘋掉!因為文件太大了!那怎辦?就利用 sed 啊!透過 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修訂!



本文轉自 sjfbjs 51CTO博客,原文鏈接:http://blog.51cto.com/11886896/1833220

總結

以上是生活随笔為你收集整理的sed命令使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。