本文主要介紹linux命令sed-i(linux命令sed替換字符串的詳細(xì)解釋),下面一起看看linux命令sed-i(linux命令sed替換字符串的詳細(xì)解釋)相關(guān)資訊。
sedsedsed命令seded全稱是:流編輯器(stream editor。linux sed命令使用腳本處理文本文件,sed可以根據(jù)腳本的指令處理和編輯文本文件。sed主要用于自動(dòng)編輯一個(gè)或多個(gè)文件,簡化文件的重復(fù)操作,編寫轉(zhuǎn)換程序。
在處理數(shù)據(jù)時(shí),sed從輸入源一次讀入一行,并將其保存在所謂的模式空間中。所有sed轉(zhuǎn)換都發(fā)生在模式空間中。轉(zhuǎn)換由命令行或外部sed腳本文件中提供的單字母命令來描述。大多數(shù)sed命令前面都可以有一個(gè)地址或地址范圍來限制它們的范圍。
選項(xiàng)含義-e script command該選項(xiàng)會(huì)將后跟腳本命令的腳本命令添加到現(xiàn)有命令中。-f腳本命令文件該選項(xiàng)會(huì)將后續(xù)文件中的腳本命令添加到現(xiàn)有命令中。-n默認(rèn)情況下,sed會(huì)在指定執(zhí)行所有腳本后自動(dòng)輸出處理后的內(nèi)容,該選項(xiàng)會(huì)阻止啟動(dòng)輸出,需要使用print命令來完成輸出。-i這個(gè)選項(xiàng)會(huì)直接修改源文件,所以要謹(jǐn)慎使用。示例:
查看passwd文件的第5到第8行。
【root @ honey-master ~】sed-n ;5,8便士;;/etc/passwdlp: x: 4 : 7 : :/var/spool/lpde cho 1-@ . com/sbin/nologinsync: 5 : 0 : sync :/sbine cho 1-@
[root@蜂蜜大師~]sed-n ;/root/p ;/etc/passwdroot: x: 0 : 0 : root:/
【root @ honey-master ~】sed-n ;/root/i p ;/etc/passwdroot: x: 0 : 0 : root:/root:/bin/bashoperator: 11 : 0 :/root:/sbin/nologin直接查看passwd文件。
【root @ honey-master ~】sed ; /etc/passwdroot: x: 0 : 0 : root:/root :/bin/bashbin: 1 : 1 :bin:/bin:/sbin/nologinda:/sbin/nologin.......,唐 此時(shí)不要配置-n參數(shù),因?yàn)?n用于取消自動(dòng)打印,配合搜索規(guī)則。
但是p標(biāo)簽會(huì)輸出修改過的行,兩者匹配的效果就是只輸出replace命令修改過的行。
在passwd文件中找到帶有/bin/bash字符串的行。
【root @ honey-master ~】sed-n ;\ %/bin/bash % p ;/etc/passwdroot: x: 0 : 0 : root:/root:/bin/bashpostgress: 1000 : 1000 : :/hom:/bin/bashflags標(biāo)注n1到512之間的數(shù)字。這意味著要替換的指定字符串只有在出現(xiàn)多次時(shí)才會(huì)被替換。例如,有三個(gè)a s在一行中,但是用戶只想替換第二個(gè)a,所以使用這個(gè)標(biāo)簽。g替換數(shù)據(jù)中所有匹配的內(nèi)容。如果沒有g(shù),只有第一次匹配成功才會(huì)被替換。例如,如果有三個(gè)a s在一行數(shù)據(jù)中,只有第一個(gè)a會(huì)被替換;p打印與replace命令中指定的模式相匹配的行。該標(biāo)記通常與-n選項(xiàng)一起使用。w file將緩沖區(qū)的內(nèi)容寫入指定的文件file;替換為正則表達(dá)式匹配的內(nèi)容;\n匹配第n個(gè)子字符串,該子字符串先前由模式中的指定。\轉(zhuǎn)義(轉(zhuǎn)義替換部分包括:,\等。).我打印數(shù)據(jù)流中的文本和不可打印的ascii字符(如終止符s和tab \t)y字符轉(zhuǎn)換,轉(zhuǎn)換后的字符必須長度相同。c將選中行的內(nèi)容替換為指定的內(nèi)容d進(jìn)行刪除,因?yàn)槭莿h除,所以d后面通常不跟任何thump刪除/data/passwd中用于打印輸出的第2 ~ 5行。
可以看到,這個(gè)刪除打印在輸出時(shí)只過濾掉了源文件的2-5行,并沒有對文件做任何修改。如果我想修改這個(gè)文件,我將使用sed -i命令。
刪除文件sed-i ;20d ;密碼。
刪除文件前的備份命令
sed-i . bak ;20d ;在文件passwd的第四行后添加一個(gè)新字符串。伊萬里
[root @ honey-master data]sed-e4a \ ivanlee passwdroot: x: 0 : 0 :/root :/bin/bashbin: 1 : 1 : 1 :bin:/binecho 1--;伊萬利 在文件的第一行之前。
[root @ honey-主數(shù)據(jù)]sed ;1i \華為 密碼huaweiroot: x: 0 : 0 : root :/root :/bin/bashbin: 1 : 1 : 1 :/bin :/sbin/nologindaemoncho 1--
如果我想插入 華為 在文件的第一行。
在第一行的開頭插入
[root @ honey-master data]sed-i ;1i華為和華為;;passwd[root @ honey-master data]cat-n passwd 1華為2 root : x: 0 : 0 :/root :/bin/bash 3 bin: 1 : 1 : 1 :bin:/binecho 1/spool/lpd:/sbin/nologin 7 sync : x: 5 : 0 : sync :/sbine cho 1-@ . com/bin/sync 8 shutdown: 6 : 0 : shutdown:/sbin:/sbin/shutdown在第二行末尾插入
[root @ honey-master data]sed-i ;2a伊萬利 passwd[root @ honey-master data]cat-n passwd 1華為2 root : x: 0 : 0 :/root :/bin/bash 3 ivan lee 4 bine : 1 : 1 : 1 echo 1 :/bin:/sbin/nologina和我的相似之處在于可以形成
sed -e:可以同時(shí)執(zhí)行多個(gè)命令。
[root @ honey-master data]sed-e/華為/vivo/g;伊萬里/安娜恩/g ;passwd 1 vivo 2 root : x: 0 : 0 : root :/root :/bin/bash 3 annnnn 4 bin: 1 : 1 :bin:/bin:/sb. com 2 :daemon:/sbine cho 1-@ . com/sbin/nologin[root @ honey-master data]貓passwd 1華為2 root : 0 : 0 : root :/root :/bin/bash 3 ivan lee 4 bin:
[地址]s/模式/替換/標(biāo)志
其中,address表示要操作的具體行,pattern表示要替換的內(nèi)容,replac:/-/3 ;passwdhuaweiroot: x: 0-0:root:/ root :/bin/bashivanleebin: 1-1:bin:/bin:/sbin/ nologindaemon: 2-2 : daemon:/sbine cho 1-@ . com/sbine cho 1-@ . com/sbin/nolog在[root @ hon:/-/1 ;passwdhuaweiroot-x: 0 : 0 : root :/root:/bin/bashivanleebin-x: 1 : 1 :/bin:/sbin/nologin daemon-xe: 2 : 2 : 2 echo 1-@ com因此,s:/-/g ;passwdhuaweiroot-x-0-0-root-/root-/bin/bashivanleebin-x-1-1-bin-/bin-/sbin/nolog in daemon-x-2-2-daemon-/sbin-/sbin/nolog in using w將修改后的內(nèi)容保存在一個(gè)命名文件中。
使用s script命令時(shí),替換類似文件路徑的字符串會(huì)比較麻煩,而且需要對路徑中的正斜杠進(jìn)行轉(zhuǎn)義,* * sed s//bin/bash//bin/ivansh/g ;密碼* *
[root@honey-master data]貓passwd 1華為2 root : x: 0 : 0 : root :/root :/bin/bash 3 ivan l:x:1:1:bin:/bin:/sbin/nologin 5 daemon: x: 2 : 2 : daemon:/sbine cho 1-@ . com/sbin/nologin[root @ honey-master data]sed/\/bin \/bash/\/bin \/ivansh/g ;passwd 1華為2 root : x: 0 : 0 : root :/root :/bin/ivansh 3 ivanlee 4 bin: 1 : 1 : 1 :/bin:
[root @ honey-主數(shù)據(jù)]sed/\/bin \/bash/\/bin \/ivansh/g ;passwd 1華為2 root : x: 0 : 0 : root :/root :/bin/ivansh 3 ivanlee 4 bin: 1 : 1 : 1 :/bin:-@ . com/sbin/nologin[root @ honey-master data]sed ;3c伊萬里_改變 passwd 1華為2 root : x: 0 : 0 : root :/root :/bin/bashivanlee _ changed 4 bin : 1 : 1 : 1 :/bin :/sb
conversion命令將對inchars和outchars的值進(jìn)行一對一的映射,也就是說,inchars中的第一個(gè)字符將被轉(zhuǎn)換為outchars中的第一個(gè)字符,第二個(gè)字符將被轉(zhuǎn)換為outchars中的第二個(gè)字符...這個(gè)映射過程將繼續(xù),直到處理完指定的字符。如果inchars和outchars的長度不同,sed將生成一條錯(cuò)誤消息。
sed y/12345/abcde/ ;passwd a華為b root : x: 0 : 0 : root :/root:/bin/bash c ivanlee d bin: ::bin:/bin:/sbin/nologin e daemonecho 1-@ -@ . com/sbin/nologin[root @ honey-master data]貓passwd 1華為2 root : x: 0 : root :/root:/bin/bash 3 ivan lee 4 bin: 1 : 1 : 1 : 1 :
sed 2q passwd 1華為2根: x: 0 :root:/root:/bin/bash剛輸出2。
sed腳本命令的尋址在之前各種腳本命令的介紹中,我們總是忽略了地址部分的介紹。對于每個(gè)腳本命令,address用于指示腳本命令作用于文本中的特定行。
默認(rèn)情況下,sed命令適用于所有文本數(shù)據(jù)行。如果您只想將命令應(yīng)用于特定行或某些行,則必須指定地址部分,這可以用以下兩種表示:
以數(shù)字形式指定行間隔;在文本模式下指定特定的行間距。以下兩種格式可用于上述兩種形式,即:
【地址】腳本命令或地址{多個(gè)腳本命令}在前面的例子中有具體的例子,所以我贏了 這里不再贅述。
以數(shù)字形式指定行間隔。當(dāng)使用數(shù)字行尋址時(shí),可以通過文本流中該行的行位置來引用它。sed會(huì)將文本流中的第一行編號為1,然后繼續(xù)將行號分配給后面的行。
在腳本命令中,指定的地址可以是單個(gè)的。行號,或由起始行號、逗號和結(jié)束行號指定的特定范圍內(nèi)的行。以下是sed命令作用于指定行號的示例:
[root @ localhost ~]# sed ;2s/狗/貓/ ;快速棕色狐貍跳過懶狗快速棕色狐貍跳過懶貓快速棕色狐貍跳過懶狗。如您所見,sed只修改由地址指定的第二行的文本。以下示例中使用了行地址間隔:
[root @ localhost ~]# s——美元符號($):
[root @ localhost ~]# sed ;2美元/狗/貓/ ;快速棕色狐貍跳過懶狗快速棕色狐貍跳過懶貓快速棕色狐貍跳過懶貓快速棕色狐貍跳過懶貓用文本模式指定行間隔。sed允許您指定文本模式來過濾出命令要處理的行。格式如下:
/模式/命令
注意,要指定的模式必須用正斜杠括起來,sed會(huì)將該命令應(yīng)用于包含指定文本模式的行。
例如,如果您只想修改用戶演示的默認(rèn)shell,可以使用sed命令并按如下執(zhí)行該命令:
[root@localhost ~] grep演示/etc/passwddemeocho 1-@ . com x: 502 : 502 :/home/samantha :/bin/bash[root @ localhost ~]sed ;/demo/s/bash/csh/ ;/etc/passwdroot: x: 0 : 0 : root:/root:/bin/bash...demo : xe: 502 e: 502 e:/hom:/bin/csh...雖然使用固定文本模式可以幫助您篩選出特定的值,但正則表達(dá)式允許您創(chuàng)建高級文本模式匹配表達(dá)式來匹配各種數(shù)據(jù)。這些表達(dá)式組合了一系列通配符、特殊字符和固定文本字符,以生成可以匹配幾乎任何文本形式的簡潔模式。
標(biāo)簽:
命令腳本
了解更多l(xiāng)inux命令sed-i(linux命令sed替換字符串的詳細(xì)解釋)相關(guān)內(nèi)容請關(guān)注本站點(diǎn)。