溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

sed命令的介紹和用法

發(fā)布時間:2020-07-23 19:14:00 來源:網(wǎng)絡(luò) 閱讀:141 作者:huai251459 欄目:系統(tǒng)運維

sed是一種流編輯器,它一次處理一行內(nèi)容。處理時,把當前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。然后讀入下行,執(zhí)行下一個循環(huán)。如果沒有使諸如‘D’的特殊命令,那會在兩個循環(huán)之間清空模式空間,但不會清空保留空間。這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有改變,除非你使用重定向存儲輸出。

sed的功能:主要用來自動編輯一個或多個文件,簡化對文件的反復(fù)操作,編寫轉(zhuǎn)換程序等

sed基本用法

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

sed [選項].. '腳本這個腳本是sed自身的腳本' 處理的文件...

常用選項:

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

-e 多點編輯

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

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

-i.bak 備份文件并原處編輯:直接修改

sed -i.bak(自己定義) '/^root/aadmin';真的修改文件并備份原文件

script:

'地址命令':地址是對文本中的那個部分進行處理,對那些行進行處理如何進行處理就是根據(jù)命令來進行處理的

地址定界:

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

(2) 單地址:

#: 指定的行,$:最后一行

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

(3) 地址范圍:

#,#

#,+#

/pat1/,/pat2/:只顯示中間的部分內(nèi)容

例如:sed -n '/^ftp/,/^sa/p' /etc/passwd

#,/pat1/

(4) ~:步進

1~2 奇數(shù)行

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

2~2 偶數(shù)行

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

sed -n '2p' /etc/passwd :只打印第2行

sed命令不僅是對文本,還可以把一些命令的標準輸出作為輸入進行處理

比如:ifconfig eth0 | sed -n '2p'

編輯命令:

d 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)(sed '2d' /etc/passwd 第二行不顯示)

p 打印當前模式空間內(nèi)容,追加到默認輸出之后(本身就會打印加上p之后會在打印一次)

a []text 在指定行后面追加文本,支持使用\n實現(xiàn)多行追加

seq 10 | sed 'axxx':每一行追加xxx

還可以添加換行符:seq 10 | sed 'axxx\nttt\nzzz'

還可以添加換行符:seq 10 | sed '2axxx\nttt\nzzz'

第二行進行追加

i []text 在行前面插入文本:添加斜線表示之后的內(nèi)容為添加的內(nèi)容

c []text 替換行為單行或多行文本

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

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

sed -n '/^UUID/r /etc/issue' /etc/fstab:讀取文件內(nèi)容

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

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

sed '' /etc/passwd :什么都不跟相當與顯示一下文件

修改selinux中配置文件

sed -i '/^SELINUX=enforcing/cSELINUX=disabled' /etc/selinux/config

禁用SElinux

sed -i ^C/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

s///g:查找替換,分隔符自己指定,可為s@@@,s###

替換標記:g,全局替換;i,忽略大小寫

高級編輯命令

h:把模式空間中的內(nèi)容覆蓋至保持空間

H:把模式空間中的內(nèi)容追加至保持空間

g:把保持空間中的內(nèi)容覆蓋至模式空間

G:把保持空間中的內(nèi)容追加至模式空間

x:把模式空間和保持空間中的內(nèi)容互換

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

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

d:刪除模式空間中的行

D:刪除多行模式空間中的行

在sed語句中強行引用變量

'''var_name''':使用三個’引號在sed語句中可強行引用變量值

例:IP=IP

[root@centos7 test]#ifconfig ens33 | sed -nr 's#.inet (.) net.*#'''$IP''' \1#p'

IP 192.168.0.100

示例:

seq 1 10 | sed -n 'n;p' :取偶數(shù)行

seq 1 10 | sed 'n;d' :取奇數(shù)行

seq 1 10 | sed '1!G;h;$!d' :逆序顯示

seq 1 10 | sed '$!d' :取出最后一行

seq 1 10 | sed '/^$/d;G' :刪除文件中的空白行,而後為所有非空白行添加一個空白行

seq 1 10 | sed '$!N;$!D' :顯示最后兩行

seq 1 10 | sed 'G' :在原有文件的每行后添加一個空白行

sed練習(xí):

練習(xí):統(tǒng)計/etc/init.d/functions文件中每個單詞出現(xiàn)的次數(shù),并排序(使用grep和sed兩個命令進行實現(xiàn))

sed -nr 's#[^[:alpha:]]+#\n#gp' /etc/rc.d/init.d/functions | sort |uniq -c |sort -nr

grep -Eo "[[:alpha:]]+" /etc/rc.d/init.d/functions | sort |uniq -c | sort -nr

練習(xí):取出指定網(wǎng)卡的IP地址

ifconfig eth0 |sed -rn '2s/(^.inet )(.)( netmask.*$)/\2/p'

ifconfig eth0|sed -nr '2s/.t (.) net.*/\1/p'

練習(xí):echo /etc/sysconfig/network/ 取出目錄名和基名

目錄名:echo /etc/sysconfig/network/ | sed -nr 's#(./)([^/].)/?$#\1#p'

基名: echo /etc/sysconfig/network/ | sed -nr 's#(./)([^/].)/?$#\2#p'

練習(xí):將文本文件的n和n+1行合并為一行

n為奇數(shù)行:seq 1 10 | sed -n 'N;s#\n##p'

n為偶數(shù)行:seq 1 10 | sed -n '1d;N;s#\n##p'

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI