Sed教程(一):简介、环境设置、工作流程
Sed表示流編輯器(Stream Editor)的縮寫(xiě)。這是一個(gè)簡(jiǎn)單但功能強(qiáng)大的工具,分析文本,并無(wú)縫地轉(zhuǎn)換它。 SED是在1973-1974年由貝爾實(shí)驗(yàn)室的李E. McMahon開(kāi)發(fā)。如今,它運(yùn)行在所有主要的操作系統(tǒng)。
McMahon編寫(xiě)了一個(gè)通用的面向行的編輯器,它最終成為sed。sed借用語(yǔ)法和ed編輯許多有用的功能。自成立開(kāi)始,就對(duì)正則表達(dá)式有所支持。sed接受來(lái)自文件以及管道的輸入。此外,它也可以接受來(lái)自標(biāo)準(zhǔn)輸入的數(shù)據(jù)流的輸入。
sed是自由軟件由基金會(huì)(FSF)維護(hù),它是由GNU/ Linux分發(fā)。因此,它通常被稱為GNU sed的。對(duì)于新手用戶,sed語(yǔ)法看起來(lái)神秘。但是,一旦熟悉了它的語(yǔ)法,就可以使用sed的幾行腳本解決許多復(fù)雜的任務(wù)。
sed典型用途
sed可以有許多不同的方式使用,例如:
- 文本替換
- 選擇性打印的文本文件
- 一個(gè)就地文本文件的編輯
- 文本文件的非交互式的編輯等等。
本章介紹如何在GNU/ Linux系統(tǒng)中設(shè)置sed環(huán)境。
安裝使用軟件包管理器
一般情況下,sed默認(rèn)提供在大多數(shù)的GNU/ Linux發(fā)行版。使用該命令,以確定其是否存在于您的系統(tǒng)上。如果沒(méi)有,那么在基于Debian GNU/ Linux可以使用apt包管理器,如下所示安裝sed:
[root]# sudo apt-get install sed安裝后,確保sed可以通過(guò)命令行訪問(wèn)。
[root]# sed --versio執(zhí)行上面的代碼,會(huì)得到如下結(jié)果:
sed (GNU sed) 4.2.2 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.htmll>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Jay Fenlason, Tom Lord, Ken Pizzini, and Paolo Bonzini. GNU sed home page: <http://www.gnu.org/software/sed/>. General help using GNU software: <http://www.gnu.org/gethelp/>. E-mail bug reports to: <bug-sed@gnu.org>. Be sure to include the word "sed" somewhere in the "Subject:" field.同樣,基于GNU/Linux的RPM安裝sed,用yum包管理器,如下所示:
[root]# yum -y install sed安裝后,確保 sed 可以通過(guò)命令行訪問(wèn)。
[root]# sed --version執(zhí)行上面的代碼,會(huì)得到如下結(jié)果:
GNU sed version 4.2.1 Copyright (C) 2009 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, to the extent permitted by law. GNU sed home page: <http://www.gnu.org/software/sed/>. General help using GNU software: <http://www.gnu.org/gethelp/>. E-mail bug reports to:<bug-gnu-utils@gnu.org>. Be sure to include the word "sed" somewhere in the "Subject:" field.從源代碼安裝
由于GNU sed是GNU計(jì)劃的一部分,它的源代碼都可以免費(fèi)下載。我們已經(jīng)看到了如何使用軟件包管理器安裝sed。現(xiàn)在,了解如何從源代碼安裝sed。
下面安裝適用于任何的GNU/Linux軟件,和大多數(shù)其他可自由使用的程序。下面是安裝步驟:
第1步 - 從一個(gè)真實(shí)的地方下載的源代碼。命令行實(shí)用程序wget服務(wù)于這個(gè)目的。
[root]# wget ftp://ftp.gnu.org/gnu/sed/sed-4.2.2.tar.bz2第2步 - 解壓縮和解壓下載的源代碼。
[root]# tar xvf sed-4.2.2.tar.bz2第3步 - 更改進(jìn)入目錄并運(yùn)行配置。
[root]# ./configure第4步 - 一旦成功完成,配置生成Makefile文件。編譯源代碼,使用 make命令。
[root]# make第5步 - 可以運(yùn)行測(cè)試套件,以確保構(gòu)建是干凈的。這是一個(gè)可選步驟。
[root]# make check第6步 - 最后,安裝sed實(shí)用工具。請(qǐng)確保有超級(jí)用戶的權(quán)限。
[root]# sudo make install我們已經(jīng)成功編譯并安裝sed。通過(guò)執(zhí)行 sed 命令,作如下驗(yàn)證:
[root]# sed --version執(zhí)行上面的代碼,會(huì)得到如下結(jié)果:
sed (GNU sed) 4.2.2 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.htmll>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Jay Fenlason, Tom Lord, Ken Pizzini, and Paolo Bonzini. GNU sed home page: <http://www.gnu.org/software/sed/>. General help using GNU software: <http://www.gnu.org/gethelp/>. E-mail bug reports to: <bug-sed@gnu.org>. Be sure to include the word "sed" somewhere in the "Subject:" field.
本章將解釋sed究竟如何工作的。要成為一個(gè)專家級(jí)的sed用戶,需要知道它的內(nèi)部執(zhí)行和結(jié)構(gòu)。sed遵循一個(gè)簡(jiǎn)單的工作流:讀取,執(zhí)行和顯示。下圖描繪了工作流程。
讀取
sed從輸入流(文件,管道,或標(biāo)準(zhǔn)輸入)讀取,并將其存儲(chǔ)在其內(nèi)部的緩沖模式稱為緩沖行。
執(zhí)行
所有sed命令順序地對(duì)模式緩沖區(qū)使用。默認(rèn)情況下,sed命令都適用于所有行(全局),除非指定行尋址。
顯示
sed發(fā)送(修改)的內(nèi)容到輸出數(shù)據(jù)流。在發(fā)送數(shù)據(jù)后,模式緩沖器是空的。這個(gè)過(guò)程一直重復(fù),直到文件被耗盡。
示例
讓我們創(chuàng)建一個(gè)文本文件quote.txt包含引用著名作家Paulo Coelho。
[jerry]$ vi quote.txt There is only one thing that makes a dream impossible to achieve: the fear of failure. - Paulo Coelho, The Alchemist為了了解sed的工作流程,讓我們使用sed顯示該文件的內(nèi)容quote.txt。這個(gè)例子模仿cat命令。
[jerry]$ sed '' quote.txt當(dāng)執(zhí)行上面的代碼,就會(huì)產(chǎn)生下面的結(jié)果。
There is only one thing that makes a dream impossible to achieve: the fear of failure.在上面的例子中,quote.txt輸入文件名和在此之前,有一對(duì)單引號(hào)的暗示sed 命令。讓我們解讀此操作。
第一sed從輸入文件quote.txt讀取并將其存儲(chǔ)在它的模式緩沖區(qū)行。然后它適用sed關(guān)于模型緩沖區(qū)命令。在我們的例子中沒(méi)有sed 命令在那里,因此是對(duì)模式緩沖區(qū)未進(jìn)行任何操作。最后刪除,并打印在標(biāo)準(zhǔn)輸出模式緩沖區(qū)中的內(nèi)容。是不是很簡(jiǎn)單?
在下面的例子中,sed 接受來(lái)自標(biāo)準(zhǔn)輸入流輸入。
[jerry]$ sed ''當(dāng)執(zhí)行上面的代碼,它會(huì)提示我們輸入從標(biāo)準(zhǔn)輸入一些文字。因此,讓我們進(jìn)入一個(gè)文本行,如下所示:
There is only one thing that makes a dream impossible to achieve: the fear of failure.輸入該行后,當(dāng)我們按下輸入產(chǎn)生以下結(jié)果:
There is only one thing that makes a dream impossible to achieve: the fear of failure.要從使用的sed會(huì)話退出,按下鍵盤(pán)上的?ctrl-D?(^D).
from: http://www.yiibai.com/sed/sed_useful_recipes.html
總結(jié)
以上是生活随笔為你收集整理的Sed教程(一):简介、环境设置、工作流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Shell教程(六):函数、联机帮助
- 下一篇: Sed教程(二):基本语法、循环、分支