GNU sed怎么在Linux中使用?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
青龍網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),青龍網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為青龍上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的青龍做網(wǎng)站的公司定做!
處理 Linux 中的文本流
Linux 將程序中的輸入和輸出當(dāng)成字符流或者字符序列。在開始理解重定向和管道之前,我們必須先了解三種最重要的I/O(輸入和輸出(Input and Output))流,事實(shí)上,它們都是特殊的文件(根據(jù) UNIX 和 Linux 中的約定,數(shù)據(jù)流和外圍設(shè)備(設(shè)備文件)也被視為普通文件)。
在 > (重定向操作符) 和 | (管道操作符)之間的區(qū)別是:前者將命令與文件相連接,而后者將命令的輸出和另一個(gè)命令相連接。
# command >file
# command1 | command2
由于重定向操作符會(huì)靜默地創(chuàng)建或覆蓋文件,我們必須特別小心謹(jǐn)慎地使用它,并且永遠(yuǎn)不要把它和管道混淆起來(lái)。在 Linux 和 UNIX 系統(tǒng)上管道的優(yōu)勢(shì)是:第一個(gè)命令的輸出不會(huì)寫入一個(gè)文件而是直接被第二個(gè)命令讀取。
在下面的操作練習(xí)中,我們將會(huì)使用這首詩(shī)——《A happy child》(作者未知)
使用 sed
sed 是流編輯器(stream editor)的縮寫。為那些不懂術(shù)語(yǔ)的人額外解釋一下,流編輯器是用來(lái)在一個(gè)輸入流(文件或者管道中的輸入)執(zhí)行基本的文本轉(zhuǎn)換的工具。
sed 最基本的用法是字符替換。我們將通過(guò)把每個(gè)出現(xiàn)的小寫 y 改寫為大寫 Y 并且將輸出重定向到 ahappychild2.txt 開始。g 標(biāo)志表示 sed 應(yīng)該替換文件每一行中所有應(yīng)當(dāng)替換的實(shí)例。如果這個(gè)標(biāo)志省略了,sed 將會(huì)只替換每一行中第一次出現(xiàn)的實(shí)例
基本語(yǔ)法:
#sed's/term/replacement/flag'file
我們的樣例:
#sed's/y/Y/g' ahappychild.txt > ahappychild2.txt
如果你要在替換文本中搜索或者替換特殊字符(如 /,\,&),你需要使用反斜杠對(duì)它進(jìn)行轉(zhuǎn)義。
例如,我們要用一個(gè)符號(hào)來(lái)替換一個(gè)文字,與此同時(shí)我們將把一行最開始出現(xiàn)的第一個(gè) I 替換為 You。
#sed's/and/\&/g;s/^I/You/g' ahappychild.txt
在上面的命令中,眾所周知 ^(插入符號(hào))是正則表達(dá)式中用來(lái)表示一行開頭的符號(hào)。
正如你所看到的,我們可以通過(guò)使用分號(hào)分隔以及用括號(hào)包裹來(lái)把兩個(gè)或者更多的替換命令(并在它們中使用正則表達(dá)式)連接起來(lái)。
另一種 sed 的用法是顯示或者刪除文件中選中的一部分。在下面的樣例中,將會(huì)顯示 /var/log/messages 中從6月8日開始的頭五行。
#sed-n '/^Jun 8/ p'/var/log/messages |sed-n 1,5p
請(qǐng)注意,在默認(rèn)的情況下,sed 會(huì)打印每一行。我們可以使用 -n 選項(xiàng)來(lái)覆蓋這一行為并且告訴 sed 只需要打?。ㄓ?p來(lái)表示)文件(或管道)中匹配的部分(第一個(gè)命令中指定以“Jun 8” 開頭的行,第二個(gè)命令中指定一到五行)。
最后,可能有用的技巧是當(dāng)檢查腳本或者配置文件的時(shí)候可以保留文件本身并且刪除注釋。下面的單行 sed 命令刪除(d)空行或者是開頭為#的行(| 字符對(duì)兩個(gè)正則表達(dá)式進(jìn)行布爾 OR 操作)。
#sed'/^#\|^$/d' apache2.conf
uniq 命令
uniq 命令允許我們返回或者刪除文件中重復(fù)的行,默認(rèn)寫到標(biāo)準(zhǔn)輸出。我們必須注意到,除非兩個(gè)重復(fù)的行相鄰,否則uniq 命令不會(huì)刪除他們。因此,uniq 經(jīng)常和一個(gè)前置的 sort 命令(一種用來(lái)對(duì)文本行進(jìn)行排序的算法)搭配使用。默認(rèn)情況下,sort 使用第一個(gè)字段(用空格分隔)作為關(guān)鍵字段。要指定一個(gè)不同的關(guān)鍵字段,我們需要使用 -k 選項(xiàng)。
樣例
du –sch /path/to/directory/* 命令將會(huì)以人類可讀的格式返回在指定目錄下每一個(gè)子文件夾和文件的磁盤空間使用情況(也會(huì)顯示每個(gè)目錄總體的情況),而且不是按照大小輸出,而是按照子文件夾和文件的名稱。我們可以使用下面的命令來(lái)讓它通過(guò)大小排序。
#du-sch /var/* | sort -h
你可以通過(guò)使用下面的命令告訴 uniq 比較每一行的前6個(gè)字符(-w 6)(這里是指定的日期)來(lái)統(tǒng)計(jì)日志事件的個(gè)數(shù),而且在每一行的開頭輸出出現(xiàn)的次數(shù)(-c)。
#cat/var/log/mail.log |uniq-c -w6
看完上述內(nèi)容,你們掌握GNU sed怎么在Linux中使用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
新聞標(biāo)題:GNUsed怎么在Linux中使用
本文來(lái)源:http://jinyejixie.com/article18/peoodp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站、建站公司、用戶體驗(yàn)、定制網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)