欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Linux上使用GNU sed的方法

  發(fā)布時(shí)間:2017-01-09 11:18:13   作者:佚名   我要評(píng)論
很多朋友再問(wèn)這樣一個(gè)問(wèn)題,如何在Linux 上使用 GNU sed;今天小編為大家分享的是在Linux上使用GNU sed的方法;希望可以幫助到大家!有需要的朋友一起去看看吧

Linux 基金會(huì)宣布了一個(gè)全新的 LFCS(Linux 基金會(huì)認(rèn)證系統(tǒng)管理員(Linux Foundation Certified Sysadmin))認(rèn)證計(jì)劃。這一計(jì)劃旨在幫助遍布全世界的人們獲得其在處理 Linux 系統(tǒng)管理任務(wù)上能力的認(rèn)證。這些能力包括支持運(yùn)行的系統(tǒng)服務(wù),以及第一手的故障診斷、分析,以及為工程師團(tuán)隊(duì)在升級(jí)時(shí)提供明智的決策。

在Linux上使用GNU sed的方法

處理 Linux 中的文本流

Linux 將程序中的輸入和輸出當(dāng)成字符流或者字符序列。在開(kāi)始理解重定向和管道之前,我們必須先了解三種最重要的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ì)寫(xiě)入一個(gè)文件而是直接被第二個(gè)命令讀取。

在下面的操作練習(xí)中,我們將會(huì)使用這首詩(shī)——《A happy child》(作者未知)

在Linux上使用GNU sed的方法

使用 sed

sed 是流編輯器(stream editor)的縮寫(xiě)。為那些不懂術(shù)語(yǔ)的人額外解釋一下,流編輯器是用來(lái)在一個(gè)輸入流(文件或者管道中的輸入)執(zhí)行基本的文本轉(zhuǎn)換的工具。

sed 最基本的用法是字符替換。我們將通過(guò)把每個(gè)出現(xiàn)的小寫(xiě) y 改寫(xiě)為大寫(xiě) Y 并且將輸出重定向到 ahappychild2.txt 開(kāi)始。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

在Linux上使用GNU sed的方法

如果你要在替換文本中搜索或者替換特殊字符(如 /,\,&),你需要使用反斜杠對(duì)它進(jìn)行轉(zhuǎn)義。

例如,我們要用一個(gè)符號(hào)來(lái)替換一個(gè)文字,與此同時(shí)我們將把一行最開(kāi)始出現(xiàn)的第一個(gè) I 替換為 You。

#sed's/and/\&/g;s/^I/You/g' ahappychild.txt

在Linux上使用GNU sed的方法

在上面的命令中,眾所周知 ^(插入符號(hào))是正則表達(dá)式中用來(lái)表示一行開(kāi)頭的符號(hào)。

正如你所看到的,我們可以通過(guò)使用分號(hào)分隔以及用括號(hào)包裹來(lái)把兩個(gè)或者更多的替換命令(并在它們中使用正則表達(dá)式)連接起來(lái)。

另一種 sed 的用法是顯示或者刪除文件中選中的一部分。在下面的樣例中,將會(huì)顯示 /var/log/messages 中從6月8日開(kāi)始的頭五行。

#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” 開(kāi)頭的行,第二個(gè)命令中指定一到五行)。

最后,可能有用的技巧是當(dāng)檢查腳本或者配置文件的時(shí)候可以保留文件本身并且刪除注釋。下面的單行 sed 命令刪除(d)空行或者是開(kāi)頭為#的行(| 字符對(duì)兩個(gè)正則表達(dá)式進(jìn)行布爾 OR 操作)。

#sed'/^#\|^$/d' apache2.conf

在Linux上使用GNU sed的方法

uniq 命令

uniq 命令允許我們返回或者刪除文件中重復(fù)的行,默認(rèn)寫(xiě)到標(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è)子文件夾和文件的磁盤(pán)空間使用情況(也會(huì)顯示每個(gè)目錄總體的情況),而且不是按照大小輸出,而是按照子文件夾和文件的名稱。我們可以使用下面的命令來(lái)讓它通過(guò)大小排序。

#du-sch /var/* | sort -h

在Linux上使用GNU sed的方法

你可以通過(guò)使用下面的命令告訴 uniq 比較每一行的前6個(gè)字符(-w 6)(這里是指定的日期)來(lái)統(tǒng)計(jì)日志事件的個(gè)數(shù),而且在每一行的開(kāi)頭輸出出現(xiàn)的次數(shù)(-c)。

#cat/var/log/mail.log |uniq-c -w6

在Linux上使用GNU sed的方法

grep 命令

grep 在文件(或命令輸出)中搜索指定正則表達(dá)式,并且在標(biāo)準(zhǔn)輸出中輸出匹配的行。

樣例

顯示文件 /etc/passwd 中用戶 gacanepa 的信息,忽略大小寫(xiě)。

#grep-i gacanepa /etc/passwd

在Linux上使用GNU sed的方法

顯示 /etc 文件夾下所有 rc 開(kāi)頭并跟隨任意數(shù)字的內(nèi)容。

#ls-l /etc |grep rc[0-9]

在Linux上使用GNU sed的方法

tr 命令使用技巧

tr 命令可以用來(lái)從標(biāo)準(zhǔn)輸入中轉(zhuǎn)換(改變)或者刪除字符,并將結(jié)果寫(xiě)入到標(biāo)準(zhǔn)輸出中。

樣例

把 sortuniq.txt 文件中所有的小寫(xiě)改為大寫(xiě)。

#cat sortuniq.txt |tr[:lower:][:upper:]

在Linux上使用GNU sed的方法

壓縮ls –l輸出中的分隔符為一個(gè)空格。

#ls-l |tr-s ' '

cut 命令使用方法

cut 命令可以基于字節(jié)(-b選項(xiàng))、字符(-c)或者字段(-f)提取部分輸入(從標(biāo)準(zhǔn)輸入或者文件中)并且將結(jié)果輸出到標(biāo)準(zhǔn)輸出。在最后一種情況下(基于字段),默認(rèn)的字段分隔符是一個(gè)制表符,但可以由 -d 選項(xiàng)來(lái)指定不同的分隔符。

樣例

從 /etc/passwd 中提取用戶賬戶和他們被分配的默認(rèn) shell(-d 選項(xiàng)允許我們指定分界符,-f 選項(xiàng)指定那些字段將被提取)。

#cat/etc/passwd|cut-d:-f1,7

在Linux上使用GNU sed的方法

將以上命令結(jié)合起來(lái),我們將使用 last 命令的輸出中第一和第三個(gè)非空文件創(chuàng)建一個(gè)文本流。我們將使用 grep 作為第一過(guò)濾器來(lái)檢查用戶 gacanepa 的會(huì)話,然后將分隔符壓縮至一個(gè)空格(tr -s ' ')。下一步,我們將使用 cut 來(lái)提取第一和第三個(gè)字段,最后使用第二個(gè)字段(本樣例中,指的是IP地址)來(lái)排序之后,再用 uniq 去重。

#last|grep gacanepa |tr-s ‘‘|cut-d’‘-f1,3|sort-k2 |uniq

在Linux上使用GNU sed的方法

上面的命令顯示了如何將多個(gè)命令和管道結(jié)合起來(lái),以便根據(jù)我們的要求得到過(guò)濾后的數(shù)據(jù)。你也可以逐步地使用它以幫助你理解輸出是如何從一個(gè)命令傳輸?shù)较乱粋€(gè)命令的(順便說(shuō)一句,這是一個(gè)非常好的學(xué)習(xí)經(jīng)驗(yàn)?。?/p>

總結(jié)

盡管這個(gè)例子(以及在當(dāng)前教程中的其他實(shí)例)第一眼看上去可能不是非常有用,但是他們是體驗(yàn)在 Linux 命令行中創(chuàng)建、編輯和操作文件的一個(gè)非常好的開(kāi)始。請(qǐng)隨時(shí)留下你的問(wèn)題和意見(jiàn)——不勝感激!

相關(guān)文章

  • linux sed命令互換包含指定關(guān)鍵字的行

    這篇文章主要介紹了linux sed命令互換包含指定關(guān)鍵字的行 ,需要的朋友可以參考下
    2016-12-04
  • 總結(jié)Linux中用于文本處理的awk、sed、grep命令用法

    這篇文章主要介紹了Linux中用于文本處理的awk、sed、grep命令用法總結(jié),是Linux入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-03-21
  • Linux中文本處理命令sed的使用示例分享

    這篇文章主要介紹了Linux中文本處理命令sed的使用示例 ,sed命令的使用是Linux入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-02-07
  • Linux系統(tǒng)中sed命令在文件某行前后添加內(nèi)容的用法

    這篇文章主要介紹了Linux系統(tǒng)中sed命令在文件某行前后添加內(nèi)容的用法,sed命令的使用是Linux入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-12-22
  • Linux下的sed命令使用詳解

    這篇文章主要介紹了Linux下的sed命令使用詳解,是Linux入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-19
  • Linux下sed命令使用全解析

    這篇文章主要介紹了Linux下sed命令使用全解析,是Linux入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-26
  • Linux命令之sed命令使用介紹

    這篇文章主要介紹了Linux命令之sed命令使用介紹,sed是linux輕量級(jí)流編輯器,用于行的操作,主要用來(lái)數(shù)據(jù)的選取、替換、刪除、新增等,從輸入文件中一次一行的讀取,需要的朋友
    2015-06-25
  • linux之sed用法

    sed是一個(gè)很好的文件處理工具,本身是一個(gè)管道命令,主要是以行為單位進(jìn)行處理,可以將數(shù)據(jù)行進(jìn)行替換、刪除、新增、選取等特定工作,下面先了解一下sed的用法
    2014-06-05
  • Linux中使用sed命令替換字符串小結(jié)

    這篇文章主要介紹了Linux中使用sed命令替換字條串小結(jié),純屬個(gè)人總結(jié),需要的朋友可以參考下
    2014-04-17
  • linux sed命令詳解

    Sed主要用來(lái)自動(dòng)編輯一個(gè)或多個(gè)文件;簡(jiǎn)化對(duì)文件的反復(fù)操作;編寫(xiě)轉(zhuǎn)換程序等
    2014-03-18

最新評(píng)論