目錄
簡介" >簡介
sed使用參數
nl /etc/passwd | sed '3,$d'
登入後複製
" >
nl /etc/passwd | sed '3,$d'
登入後複製
将 IP 前面的部分予以删除
将 IP 后面的部分予以删除
多点编辑
直接修改文件内容(危险动作)
首頁 運維 linux運維 關於linux中sed指令的範例程式碼分享詳解

關於linux中sed指令的範例程式碼分享詳解

Jun 07, 2017 am 10:26 AM

簡介

sed 是一種線上編輯器,它一次處理一行內容。處理時,把目前處理的行儲存在暫存緩衝區中,稱為「模式空間」(pattern space),接著用sed指令處理緩衝區中的內容,處理完成後,把緩衝區的內容送到螢幕。接著處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有 改變,除非你使用重定向儲存輸出。 Sed主要用來自動編輯一個或多個文件;簡化對文件的重複操作;編寫轉換程序等。

sed使用參數

[root@www ~]# sed [-nefr] [动作]
登入後複製

選項與參數:

-n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的資料一般都會被列出到終端上。但如果加上 -n 參數後,則只有經過sed 特殊處理的那一行(或動作)才會被列出來。

-e :直接在命令列模式上進行sed 的動作編輯;

-f :直接將sed 的動作寫在一個檔案內, -f file# name 則可以執行filename 內的sed 動作;

-r :sed 的動作支援的是延伸正規表示法的語法。 (預設是基礎正規表示法語法)

-i :直接修改讀取的檔案內容,而不是輸出到終端。

動作說明: [n1[,n2]]function

n1, 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/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 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'
登入後複製

在第二行後(亦即是加在第三行)加上‘ new line text?’字樣!

[root@www ~]# nl /etc/passwd | sed '2a new line text'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
new line text
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....
登入後複製

那麼如果是要在第二行前

nl /etc/passwd | sed '2i new line text'
登入後複製

以行為單位的替換與顯示

將第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 number
6 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/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 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/bash
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  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/sh
3  bin:x:2:2:bin:/bin:/bin/sh
....下面忽略
#第一行的匹配root已经删除了
登入後複製

資料的搜尋並執行命令

#找到符合模式eastern的行後,

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

 nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
 1  root:x:0:0:root:/root:/bin/blueshell
登入後複製

如果只替換/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:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 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/blueshell

2 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 去修订!

以上是關於linux中sed指令的範例程式碼分享詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

centos和ubuntu的區別 centos和ubuntu的區別 Apr 14, 2025 pm 09:09 PM

CentOS 和 Ubuntu 的關鍵差異在於:起源(CentOS 源自 Red Hat,面向企業;Ubuntu 源自 Debian,面向個人)、包管理(CentOS 使用 yum,注重穩定;Ubuntu 使用 apt,更新頻率高)、支持週期(CentOS 提供 10 年支持,Ubuntu 提供 5 年 LTS 支持)、社區支持(CentOS 側重穩定,Ubuntu 提供廣泛教程和文檔)、用途(CentOS 偏向服務器,Ubuntu 適用於服務器和桌面),其他差異包括安裝精簡度(CentOS 精

centos如何安裝 centos如何安裝 Apr 14, 2025 pm 09:03 PM

CentOS 安裝步驟:下載 ISO 映像並刻錄可引導媒體;啟動並選擇安裝源;選擇語言和鍵盤佈局;配置網絡;分區硬盤;設置系統時鐘;創建 root 用戶;選擇軟件包;開始安裝;安裝完成後重啟並從硬盤啟動。

Centos停止維護2024 Centos停止維護2024 Apr 14, 2025 pm 08:39 PM

CentOS將於2024年停止維護,原因是其上游發行版RHEL 8已停止維護。該停更將影響CentOS 8系統,使其無法繼續接收更新。用戶應規劃遷移,建議選項包括CentOS Stream、AlmaLinux和Rocky Linux,以保持系統安全和穩定。

docker原理詳解 docker原理詳解 Apr 14, 2025 pm 11:57 PM

Docker利用Linux內核特性,提供高效、隔離的應用運行環境。其工作原理如下:1. 鏡像作為只讀模板,包含運行應用所需的一切;2. 聯合文件系統(UnionFS)層疊多個文件系統,只存儲差異部分,節省空間並加快速度;3. 守護進程管理鏡像和容器,客戶端用於交互;4. Namespaces和cgroups實現容器隔離和資源限制;5. 多種網絡模式支持容器互聯。理解這些核心概念,才能更好地利用Docker。

Centos停止維護後的選擇 Centos停止維護後的選擇 Apr 14, 2025 pm 08:51 PM

CentOS 已停止維護,替代選擇包括:1. Rocky Linux(兼容性最佳);2. AlmaLinux(與 CentOS 兼容);3. Ubuntu Server(需要配置);4. Red Hat Enterprise Linux(商業版,付費許可);5. Oracle Linux(與 CentOS 和 RHEL 兼容)。在遷移時,考慮因素有:兼容性、可用性、支持、成本和社區支持。

docker desktop怎麼用 docker desktop怎麼用 Apr 15, 2025 am 11:45 AM

如何使用 Docker Desktop? Docker Desktop 是一款工具,用於在本地機器上運行 Docker 容器。其使用步驟包括:1. 安裝 Docker Desktop;2. 啟動 Docker Desktop;3. 創建 Docker 鏡像(使用 Dockerfile);4. 構建 Docker 鏡像(使用 docker build);5. 運行 Docker 容器(使用 docker run)。

centos怎麼掛載硬盤 centos怎麼掛載硬盤 Apr 14, 2025 pm 08:15 PM

CentOS硬盤掛載分為以下步驟:確定硬盤設備名(/dev/sdX);創建掛載點(建議使用/mnt/newdisk);執行mount命令(mount /dev/sdX1 /mnt/newdisk);編輯/etc/fstab文件添加永久掛載配置;卸載設備使用umount命令,確保沒有進程使用設備。

centos停止維護後怎麼辦 centos停止維護後怎麼辦 Apr 14, 2025 pm 08:48 PM

CentOS 停止維護後,用戶可以採取以下措施應對:選擇兼容髮行版:如 AlmaLinux、Rocky Linux、CentOS Stream。遷移到商業發行版:如 Red Hat Enterprise Linux、Oracle Linux。升級到 CentOS 9 Stream:滾動發行版,提供最新技術。選擇其他 Linux 發行版:如 Ubuntu、Debian。評估容器、虛擬機或云平台等其他選項。

See all articles