新聞中心
命令行編輯器——sed在Linux系統(tǒng)中的應(yīng)用

Linux操作系統(tǒng)是一種開(kāi)源操作系統(tǒng),擁有許多強(qiáng)大的功能和工具,其中一個(gè)重要的工具就是命令行編輯器sed。sed是Stream Editor的縮寫(xiě),是一種非交互式的文本編輯器,能夠通過(guò)命令行編輯文本文件,實(shí)現(xiàn)文本文件的替換、刪除、添加、查詢等多種編輯操作。在Linux系統(tǒng)中,sed是一種最常用的命令行工具之一,它能夠有效地簡(jiǎn)化文本文件的處理過(guò)程,提高工作效率。本文將介紹sed工具的基本用法及其在Linux系統(tǒng)中的應(yīng)用。
一、sed的基本使用方法
sed命令的基本格式為:
$ sed [選項(xiàng)] ‘編輯命令’ 文件名
其中,選項(xiàng)包括:
-i:直接修改文件內(nèi)容而不是輸出到終端顯示;
-n:不顯示處理過(guò)程輸出;
-e:允許進(jìn)行多個(gè)編輯操作;
-r或-E:使用擴(kuò)展正則表達(dá)式;
基本編輯命令包括:
s命令:替換文本中的內(nèi)容;
d命令:刪除文本中的行;
p命令:打印匹配的文本行;
a命令:在文本的特定行之后添加一行文本;
i命令:在文本的特定行之前添加一行文本。
二、sed在Linux系統(tǒng)中的應(yīng)用
1.文本內(nèi)容的替換
在Linux系統(tǒng)中,我們可以使用sed命令對(duì)文本中的內(nèi)容進(jìn)行替換。例如,我們要將文本中的apple替換為orange,可以使用以下命令:
$ sed ‘s/apple/orange/g’ filename.txt
其中,s命令表示替換,g表示全部替換。這個(gè)命令會(huì)將filename.txt中所有的apple替換成orange。
2.刪除指定行
使用sed也可以刪除文本文件中的特定行。比如,我們要?jiǎng)h除文件中第5行到第10行的內(nèi)容,可以使用以下命令:
$ sed ‘5,10d’ filename.txt
其中,d命令表示刪除,5,10表示刪除第5行到第10行的內(nèi)容。
3.文本內(nèi)容的添加
在Linux系統(tǒng)中,我們也可以使用sed命令對(duì)文本中的內(nèi)容進(jìn)行添加。比如,我們要在第3行后添加一行內(nèi)容,可以使用以下命令:
$ sed ‘3a\ This is a new line.’ filename.txt
其中,a命令表示在特定行之后添加一行文本,\用于轉(zhuǎn)義。
4.文本中的搜索
使用sed也可以在文本中進(jìn)行搜索。比如,我們要在文件filename.txt中搜索包含”apple”的行,可以使用以下命令:
$ sed -n ‘/apple/p’ filename.txt
其中,-n表示不顯示處理過(guò)程的輸出,/apple/p表示搜索包含”apple”的行并打印。
5.正則表達(dá)式的運(yùn)用
sed能夠支持?jǐn)U展正則表達(dá)式的運(yùn)用,可以極大地方便我們的文本編輯工作。比如,我們要使用擴(kuò)展正則表達(dá)式來(lái)替換文本中的數(shù)字,可以使用以下命令:
$ sed -E ‘s/[0-9]+/#/g’ filename.txt
其中,-E表示使用擴(kuò)展正則表達(dá)式,s/[0-9]+/#/g表示替換文本中的數(shù)字為#。
結(jié)語(yǔ)
sed是Linux系統(tǒng)中非常常用的命令行文本編輯器,其強(qiáng)大的編輯功能與簡(jiǎn)單的使用方式相結(jié)合,使得我們能夠更快捷地對(duì)文本文件進(jìn)行編輯操作。在平時(shí)的工作中,深入掌握sed命令的使用方法及其應(yīng)用領(lǐng)域,能夠提高我們的工作效率,實(shí)現(xiàn)更加便捷的文本編輯。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
linux shell sed命令用法
sed替換命令的結(jié)構(gòu)為: s/A/B/
你在最后少了個(gè)斜杠/,結(jié)吵沖差構(gòu)不完整判納,會(huì)報(bào)升皮錯(cuò)。
修改為:
A=hello
ar=$(date “+%Y%m%d”)
echo A | sed “s/he/$Var/”
我注意到你結(jié)尾脊灶兄忘寫(xiě)櫻襲斜杠了。
echo $A | sed 辯答”s/he/$Var/”
s/::RE::/::DT::/::OPTION::
是這個(gè)語(yǔ)法…
$ echo $A | sed “s/he/$Var/游握孫”
llo
幫你試過(guò)了神鏈皮孝
linux之sed用法
sed是一個(gè)很好的文件處理工具,本身是一個(gè)管道命令,主要是以行為單位進(jìn)行處理,可以將數(shù)據(jù)行進(jìn)行替換、刪除、新增、選取等特定工作。
sed命令行格式為:
sed ‘command’ 輸入文本
常用選項(xiàng):
n∶使用安靜(silent)模式。在一般 sed 的用法中,所有來(lái)自 STDIN的資料一般都會(huì)被列出到螢?zāi)簧?。但如果加?-n 參數(shù)后,則只有經(jīng)過(guò)sed 特殊處理的那一行(或者動(dòng)作)才會(huì)被列出來(lái)。
e∶直接在指令列模式上進(jìn)行 sed 的動(dòng)作編輯;
f∶直接將 sed 的動(dòng)作寫(xiě)在一個(gè)檔案內(nèi), -f filename 則可以執(zhí)行 filename 內(nèi)的sed 動(dòng)作;
r∶sed 的動(dòng)作支援的是延伸型耐嫌正規(guī)表示法的語(yǔ)法。(預(yù)設(shè)是基礎(chǔ)正規(guī)表示法語(yǔ)法)
i∶直接修改讀取的檔案內(nèi)容,而不是由螢?zāi)惠敵觥?/p>
常用命令:
a ∶新增, a 的后面可以接字串,而這些字串會(huì)在新的一行出現(xiàn)(目前的下一行)~
c ∶取代, c 的后面昌歷手可以接字串,這些字串可以取代 n1,n2 之間的行!
d ∶刪除,因?yàn)槭莿h除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而這些字串會(huì)在新的一行出現(xiàn)(目前的上一行);
p ∶列印,亦即將某個(gè)選擇的資料印出。通常 p 會(huì)與參數(shù) sed -n 一起運(yùn)作~
s ∶取代,可以直接進(jìn)行取代的工作哩!通常這個(gè) s 的動(dòng)作可以搭配正規(guī)表示法!例如 1,20s/old/new/g 就是。
舉例:(假設(shè)我們有一文件名為ab)
刪除某行
# sed ‘1d’ ab#刪除之一行
# sed ‘$d’ ab#刪除最后一行
# sed ‘1,2d’ ab#刪除之一行到第二行
# sed ‘2,$d’ ab#刪除第二行到最后一行
顯示某行
. # sed -n ‘1p’ ab#顯示之一行
# sed -n ‘$p’ ab#顯示最后一行
# sed -n ‘1,2p’ ab#顯示之一行到第二行
# sed -n ‘2,$p’ ab#顯示第二行到最后一行
使用模式進(jìn)行查詢
# sed -n ‘/ruby/p’ ab #查詢爛悄包括關(guān)鍵字ruby所在所有行
# sed -n ‘/\$/p’ ab#查詢包括關(guān)鍵字$所在所有行,使用反斜線\屏蔽特殊含義
增加一行或多行字符串
# cat ab
Hello!
ruby is me,welcome to my blog.
end
# sed ‘1a drink tea’ ab #之一行后增加字符串”drink tea”
Hello!
drink tea
ruby is me,welcome to my blog.
end
# sed ‘1,3a drink tea’ ab #之一行到第三行后增加字符串”drink tea”
Hello!
drink tea
ruby is me,welcome to my blog.
drink tea
end
drink tea
# sed ‘1a drink tea\nor coffee’ ab #之一行后增加多行,使用換行符\n
Hello!
drink tea
or coffee
ruby is me,welcome to my blog.
end
代替一行或多行
# sed ‘1c Hi’ ab #之一行代替為Hi
Hi
ruby is me,welcome to my blog.
end
# sed ‘1,2c Hi’ ab#之一行到第二行代替為Hi
Hi
end
替換一行中的某部分
格式:sed ‘s/要替換的字符串/新的字符串/g’ (要替換的字符串可以用正則表達(dá)式)
# sed -n ‘/ruby/p’ ab | sed ‘s/ruby/bird/g’ #替換ruby為bird
# sed -n ‘/ruby/p’ ab | sed ‘s/ruby//g’#刪除ruby
插入
# sed -i ‘$a bye’ ab#在文件ab中最后一行直接輸入”bye”
# cat ab
Hello!
ruby is me,welcome to my blog.
end
bye
sed 命令查找與替換:
(1)刪除第2,3行:sed ‘2,3d’ test.txt > new.txt
(2)替換:
替換所有:sed ‘s/abc/ABC/’ test.txt >new.txt
查找: sed -n “/abc/p” test.txt
匹配字符串中的一部分: echo abc123 | sed ‘s/\(*\).*/\1/’
echo “ab001_ac” | sed ‘s/\(.*\)\_\(.*\)/\1,\2/’ \1表示之一個(gè)括號(hào)匹配的字符
echo “ABC01” | sed “s/*\(*\)/\1/”\1匹配后面的數(shù)字部分
echo “ab001_AC88” | sed ‘s/*\(*$\)/\1/’
echo “a001_aaST88” | sed “s/\(.*\)\(\)\(*$\)/\2/”
sed “s/^/\”&/” 32.txt 行首添加雙引號(hào)
sed “s/$/\”&/” 33.txt 行尾添加雙引號(hào)
sed “s/*$//” 35.txt 替換行尾空格
只顯示指定行范圍的文件內(nèi)容,例如:
# 只查看文件的第100行到第200行
sed -n ‘100,200p’ mysql_slow_query.log
sed -n $n”p” 22.txt 顯示某一行 n=2
sed大小寫(xiě)轉(zhuǎn)換?
如何先查找,再追加所查找的行到一個(gè)新的文件:
(3)查找Tab:
sed “s/\{2,\}/\|/g”查找Tab,查找多空格,單獨(dú)一個(gè)空格的除外
awk ‘/3\t/’ 34.txt 查找\t
sed -n ‘/3>/p’ 34.txt 查找空格
sed “/\\t/p” 34.txt 查找tab
echo “\tabc\t23” | sed ‘s/>/-/’ 替換tab
sed -n ‘/>*/p’ 34.txt 查找tab
如何只替換第2個(gè)\t?
(4)
行末空格
sed ‘s/*$//g’
(5)替找空格:
echo “abc 23” | sed ‘s/\{2,\}/ /’ 把多個(gè)空格替換成一個(gè)空格
(3)
如果你想在每行的80個(gè)字符后加一個(gè)冒號(hào),你可寫(xiě):
sed ‘s/./&:/80’ new
你也可以以蠻力解決,如下:
sed ‘s/^……………………………………………………………………../&:/’ new
(4)找一個(gè)sed命令在文件每一行加一個(gè)變量的例子:
sed ‘s/.*/&-/’ new.txt
用&作為匹配的串
有時(shí)你想查找一個(gè)模式,然后加上幾個(gè)字符,比如在匹配的串前后加上括號(hào)。如果你是找一個(gè)確定的字符串,還是比較簡(jiǎn)單的,如下即可:
sed ‘s/abc/(abc)/’ new
如果你不是非常清楚你將找到的是串是什么,那你應(yīng)該如果來(lái)利用你找到的串做某種替換呢?
答案就是你需要一個(gè)特定的字符”&”,它即指代匹配的模式
sed ‘s/*/(&)/’ new
你可以在替換時(shí)多次使用”&”,比如,你可以次每行開(kāi)頭的數(shù)字復(fù)制一次,如下:
% echo “123 abc” | sed ‘s/*/& &/’
abc
讓我再修正一下這個(gè)例子,sed會(huì)以貪婪的方式匹配之一個(gè)串。對(duì)于’*’的之一個(gè)區(qū)配是之一個(gè)字符,因?yàn)檫@個(gè)正則是匹配0個(gè)或多個(gè)數(shù)字。所以如果輸入是”abc 123”,輸出也不會(huì)改變(當(dāng)然,除了有一個(gè)空格在字母之前)。一個(gè)能保證能匹配一個(gè)數(shù)字的更好的復(fù)制數(shù)字的方法是:
% echo “123 abc” | sed ‘s/*/& &/’
abc
(5)sed 中如何使用變量(變量使用單引號(hào)包起來(lái)):
echo “abc” | sed ‘s/ab/’$v’/’
如何在文件的每一行的最前面加一個(gè)字符串和空格!
sed ‘s/^/ttt /g’ test
如何在文件的每一行的最前面加一個(gè)字符串和空格!
sed ‘s/^/ttt /g tese | sed ‘s/$/ sss\&/g’
如何在文件的每一行的最前面加一個(gè)字符串和空格!
sed ‘s/^/ttt /g tese | sed ‘s/$/ sss\&/g’
(7)匹配空行:
查找空行:sed -n “/^$/p” 20.txt
刪除空行:sed “/^$/d” 21.txt
n 不打印; sed不寫(xiě)編輯行到標(biāo)準(zhǔn)輸出,缺省為打印所有行(編輯和未編輯),p命令可以用來(lái)打印編輯行
c 下一命令是編輯命令,使用多項(xiàng)編輯時(shí)加入此選項(xiàng)
f 如果正在調(diào)用sed腳本文件,使用此選項(xiàng),此選項(xiàng)通知sed一個(gè)腳本文件支持所用的sed命令,如
sed -f myscript.sed input_file 這里myscript.sed即為支持sed命令的文件
(21) 只顯示指定行范圍的文件內(nèi)容,例如:
# 只查看文件的第100行到第200行
sed -n ‘100,200p’ mysql_slow_query.log
(22)退出狀態(tài)
sed不向grep一樣,不管是否找到指定的模式,它的退出狀態(tài)都是0。只有當(dāng)命令存在語(yǔ)法錯(cuò)誤時(shí),sed的退出狀態(tài)才不是0。
(23)y命令
該命令與UNIX/Linux中的tr命令類似,字符按照一對(duì)一的方式從左到右進(jìn)行轉(zhuǎn)換。例如,y/abc/ABC/將把所有小寫(xiě)的a轉(zhuǎn)換成A,小寫(xiě)的b轉(zhuǎn)換成B,小寫(xiě)的c轉(zhuǎn)換成C。
sed ‘1,20y/hrwang12/HRWANG^$/’ datafile
#將1到20行內(nèi),所有的小寫(xiě)hrwang轉(zhuǎn)換成大寫(xiě),將1轉(zhuǎn)換成^,將2轉(zhuǎn)換成$。
#正則表達(dá)式元字符對(duì)y命令不起作用。與s命令的分隔符一樣,斜線可以被替換成其它的字符。
(24)% echo “123 abc” | sed ‘s/*/& &/’
abc
字符串”abc”沒(méi)有改變,因?yàn)樗鼪](méi)有匹配正則表達(dá)式,如果你想在輸出中刪除”abc”,你必須擴(kuò)展正則表達(dá)式來(lái)匹配行的其它的部分,并顯式地用”(”,”)”和”\1”來(lái)指名,這就是下節(jié)的內(nèi)容了。
用\1來(lái)指明匹配的部分
我已經(jīng)在正則表達(dá)式那一章中介紹了”(” ”)”和”\1”的用法?,F(xiàn)在復(fù)習(xí)一下,被轉(zhuǎn)義的括號(hào)(即,有反斜杠在前面的括號(hào))來(lái)記錄正則表達(dá)的某一部分?!盶1”是被記錄的之一個(gè)模式,”\2”是第二個(gè)被記錄的模式。Sed可以記錄9個(gè)模式。
如果你想保存每行的之一個(gè)單詞,并刪除行的其它部分,你可以用下面的命令:
sed ‘s/\(\*).*/\1/’
我應(yīng)該再詳細(xì)地解釋一下。正則表達(dá)式是以貪婪的方式匹配。”*”匹配0個(gè)或多個(gè)小寫(xiě)字母,它會(huì)盡量匹配更多的小寫(xiě)字母?!?*”會(huì)在之一個(gè)匹配后匹配0個(gè)或多個(gè)字符。因?yàn)橹粋€(gè)模式已經(jīng)匹配了所有的小寫(xiě)字母,第二個(gè)模式會(huì)匹配剩下的字符,所以你使用命令:
echo abcd123 | sed ‘s/\(*\).*/\1/’
會(huì)輸出”abcd”,而刪除后面的數(shù)字。
如果你想調(diào)換兩個(gè)單詞的位置,你可記錄兩個(gè)模式,并改變它們的次序。
sed ‘s/\(*\) \(*\)/\2 \1/’
注意兩個(gè)模式中間是有空格的。這個(gè)可保證找到兩個(gè)單詞。但是*這種模式會(huì)匹配0個(gè)字母,如果你想至少匹配一個(gè)字母,你可以用下面的命令:
sed ‘s/\(*\) \(*\)/\2 \1/’
“\1”并不需要一定出現(xiàn)在替換串中(右部),它你也可以在查找的模式中(左部)。如果你想刪除重復(fù)的單詞,你可以用:
sed ‘s/\(*\) \1/\1/’
sed的linux的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于sed的linux,命令行編輯器——sed在linux系統(tǒng)中的應(yīng)用,linux shell sed命令用法的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢:028-86922220。
當(dāng)前文章:命令行編輯器——sed在linux系統(tǒng)中的應(yīng)用(sed的linux)
URL地址:http://m.fisionsoft.com.cn/article/dhhheio.html


咨詢
建站咨詢
