新聞中心
在Linux系統(tǒng)中,有許多工具都可以被用來完成一些基礎(chǔ)的文本處理任務(wù)。其中一個(gè)被很多人喜歡使用的命令行工具是sed。sed是一個(gè)流編輯器,它被設(shè)計(jì)用來自動(dòng)編輯文件的內(nèi)容,并且能夠以非常高效的方式將這些操作應(yīng)用到大量的文本數(shù)據(jù)上。

成都創(chuàng)新互聯(lián)從2013年成立,先為安陽等服務(wù)建站,安陽等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為安陽企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
在本文中,我們將介紹如何使用sed來處理幾個(gè)測試文件。這些文件包含了不同的文本數(shù)據(jù)形式,它們將幫助我們熟悉sed的功能和用法。
測試文件1:demo.txt
———————
我們先從一個(gè)非常簡單的文件開始:demo.txt。這個(gè)文件包含了一段無意義的文本。
“`
This is some text in demo.txt.
“`
我們可以用sed來刪除這個(gè)文件中的所有文本。為此,我們可以使用空替換命令:s//。在這里,我們只需要給sed一個(gè)包含/的替換表達(dá)式就可以了。代碼如下:
“`
sed ‘s/.*/ /’ demo.txt
“`
當(dāng)我們執(zhí)行這條命令后,我們會(huì)發(fā)現(xiàn)demo.txt變成了一個(gè)空文件。
測試文件2:demo2.txt
———————-
現(xiàn)在讓我們看一下另一個(gè)測試文件,它包含了一些更復(fù)雜的文本。文件名為demo2.txt,內(nèi)容如下:
“`
This is an example of a line
This is another example of a line
This line contns “quotation marks”
This line contns “quotes” and ‘a(chǎn)postrophes’
“`
這個(gè)文件包含了四行文本。之一行和第二行都非常簡單,而第三行和第四行則包含了引號和撇號等特殊字符。
假設(shè)我們想要?jiǎng)h除這個(gè)文件中所有含有引號和撇號的行。我們可以使用下面的命令:
“`
sed ‘/[\”\x27]/d’ demo2.txt
“`
這行代碼的意思是,查找所有包含引號或撇號的行,并將它們從文本中刪除。
當(dāng)我們運(yùn)行這個(gè)命令時(shí),輸出結(jié)果將只包含前兩行文本:
“`
This is an example of a line
This is another example of a line
“`
測試文件3:demo3.txt
———————-
現(xiàn)在,讓我們再來看一個(gè)測試文件。這個(gè)文件名為demo3.txt,內(nèi)容如下:
“`
This is the first line of the file.
This is the second line of the file.
This is the third line of the file.
This is the fourth line of the file.
This is the fifth line of the file.
“`
假設(shè)我們想要在這個(gè)文件的每一行后面添加一個(gè)句號。我們可以使用以下命令:
“`
sed ‘s/$/./g’ demo3.txt
“`
這個(gè)命令使用了一個(gè)叫做”替換”的sed命令。在這里,我們將每一行末尾的行尾符號替換成一個(gè)句號。在這個(gè)命令中,$表示每一行的末尾,而g選項(xiàng)表示全局替換。
當(dāng)我們執(zhí)行這個(gè)命令后,我們會(huì)發(fā)現(xiàn)輸出結(jié)果如下:
“`
This is the first line of the file.
This is the second line of the file.
This is the third line of the file.
This is the fourth line of the file.
This is the fifth line of the file.
“`
在本文中,我們介紹了sed工具的幾個(gè)功能和用法。我們使用了三個(gè)測試文件,分別演示了刪除整個(gè)文本,刪除包含特殊字符的行,和在每一行末尾添加一個(gè)句號的功能。
總體來說,sed是一個(gè)功能強(qiáng)大的文本編輯工具,能夠快速、高效地處理大量的文本數(shù)據(jù)。由于使用了命令行的方式,它也非常適合在自動(dòng)化腳本中使用。我希望本文能夠幫助您更好地了解sed工具的用法。
相關(guān)問題拓展閱讀:
- linux shell sed命令用法
linux shell sed命令用法
$ echo $A | sed “s/he/$Var/游握孫”
llo
幫你試過了神鏈皮孝
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é)尾脊灶兄忘寫櫻襲斜杠了。
echo $A | sed 辯答”s/he/$Var/”
s/::RE::/::DT::/::OPTION::
是這個(gè)語法…
linux之sed用法
sed是一個(gè)很好的文件處理工具,本身是一個(gè)管道命令,主要是以行為單位進(jìn)行處理,可以將數(shù)據(jù)行進(jìn)行替換、刪除、新增、選取等特定工作。
sed命令行格式為:
sed ‘command’ 輸入文本
常用選項(xiàng):
n∶使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會(huì)被列出到螢?zāi)簧?。但如果加?-n 參數(shù)后,則只有經(jīng)過sed 特殊處理的那一行(或者動(dòng)作)才會(huì)被列出來。
e∶直接在指令列模式上進(jìn)行 sed 的動(dòng)作編輯;
f∶直接將 sed 的動(dòng)作寫在一個(gè)檔案內(nèi), -f filename 則可以執(zhí)行 filename 內(nèi)的sed 動(dòng)作;
r∶sed 的動(dòng)作支援的是延伸型耐嫌正規(guī)表示法的語法。(預(yù)設(shè)是基礎(chǔ)正規(guī)表示法語法)
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 #之一行后增加多行,使用換行符
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è)括號匹配的字符
echo “ABC01” | sed “s/*\(*\)/\1/”\1匹配后面的數(shù)字部分
echo “ab001_AC88” | sed ‘s/*\(*$\)/\1/’
echo “a001_aaST88” | sed “s/\(.*\)\(\)\(*$\)/\2/”
sed “s/^/\”&/” 32.txt 行首添加雙引號
sed “s/$/\”&/” 33.txt 行尾添加雙引號
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大小寫轉(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è)冒號,你可寫:
sed ‘s/./&:/80’ new
你也可以以蠻力解決,如下:
sed ‘s/^……………………………………………………………………../&:/’ new
(4)找一個(gè)sed命令在文件每一行加一個(gè)變量的例子:
sed ‘s/.*/&-/’ new.txt
用&作為匹配的串
有時(shí)你想查找一個(gè)模式,然后加上幾個(gè)字符,比如在匹配的串前后加上括號。如果你是找一個(gè)確定的字符串,還是比較簡單的,如下即可:
sed ‘s/abc/(abc)/’ new
如果你不是非常清楚你將找到的是串是什么,那你應(yīng)該如果來利用你找到的串做某種替換呢?
答案就是你需要一個(gè)特定的字符”&”,它即指代匹配的模式
sed ‘s/*/(&)/’ new
你可以在替換時(shí)多次使用”&”,比如,你可以次每行開頭的數(shù)字復(fù)制一次,如下:
% echo “123 abc” | sed ‘s/*/& &/’
abc
讓我再修正一下這個(gè)例子,sed會(huì)以貪婪的方式匹配之一個(gè)串。對于’*’的之一個(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 中如何使用變量(變量使用單引號包起來):
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不寫編輯行到標(biāo)準(zhǔn)輸出,缺省為打印所有行(編輯和未編輯),p命令可以用來打印編輯行
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)命令存在語法錯(cuò)誤時(shí),sed的退出狀態(tài)才不是0。
(23)y命令
該命令與UNIX/Linux中的tr命令類似,字符按照一對一的方式從左到右進(jìn)行轉(zhuǎn)換。例如,y/abc/ABC/將把所有小寫的a轉(zhuǎn)換成A,小寫的b轉(zhuǎn)換成B,小寫的c轉(zhuǎn)換成C。
sed ‘1,20y/hrwang12/HRWANG^$/’ datafile
#將1到20行內(nèi),所有的小寫hrwang轉(zhuǎn)換成大寫,將1轉(zhuǎn)換成^,將2轉(zhuǎn)換成$。
#正則表達(dá)式元字符對y命令不起作用。與s命令的分隔符一樣,斜線可以被替換成其它的字符。
(24)% echo “123 abc” | sed ‘s/*/& &/’
abc
字符串”abc”沒有改變,因?yàn)樗鼪]有匹配正則表達(dá)式,如果你想在輸出中刪除”abc”,你必須擴(kuò)展正則表達(dá)式來匹配行的其它的部分,并顯式地用”(”,”)”和”\1”來指名,這就是下節(jié)的內(nèi)容了。
用\1來指明匹配的部分
我已經(jīng)在正則表達(dá)式那一章中介紹了”(” ”)”和”\1”的用法?,F(xiàn)在復(fù)習(xí)一下,被轉(zhuǎn)義的括號(即,有反斜杠在前面的括號)來記錄正則表達(dá)的某一部分?!盶1”是被記錄的之一個(gè)模式,”\2”是第二個(gè)被記錄的模式。Sed可以記錄9個(gè)模式。
如果你想保存每行的之一個(gè)單詞,并刪除行的其它部分,你可以用下面的命令:
sed ‘s/\(\*).*/\1/’
我應(yīng)該再詳細(xì)地解釋一下。正則表達(dá)式是以貪婪的方式匹配?!?”匹配0個(gè)或多個(gè)小寫字母,它會(huì)盡量匹配更多的小寫字母。”.*”會(huì)在之一個(gè)匹配后匹配0個(gè)或多個(gè)字符。因?yàn)橹粋€(gè)模式已經(jīng)匹配了所有的小寫字母,第二個(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/’
關(guān)于linux sed 測試文件的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價(jià)格厚道的香港/美國云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽、重慶、貴陽機(jī)房服務(wù)器托管租用。
分享名稱:Linux Sed工具測試文件的應(yīng)用 (linux sed 測試文件)
文章URL:http://www.dlmjj.cn/article/cdsghho.html


咨詢
建站咨詢
