linux命令撇號,shell反撇號

linux基本命令

[root@localhost ~]#

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),合川企業(yè)網(wǎng)站建設(shè),合川品牌網(wǎng)站建設(shè),網(wǎng)站定制,合川網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,合川網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

用戶 @ 主機名 當前目錄

總結(jié)Linux命令輸入規(guī)律:

如何輸入命令:

命令 [選項]([參數(shù)])[選項的值]([參數(shù)的值])空格分割

常見選項(參數(shù)):-h --help ; 特點:選項前有一個 -字母 或 --加單詞

例:find /home -name mk

命令后:左邊是源 右邊是目標

例:cp a.txt a.txt.bak

作用:查看目錄下的文檔

語法:ls 目錄

-l 顯示詳細信息

-a 顯示隱藏文件

. 當時目錄

.. 上級目錄

-d 查看目錄

-h 增強可讀性

作用:查看當前所在的路徑

語法:pwd

例:[root@iZ9403omxhxZ html]# pwd

/var/www/html

作用:切換目錄

語法:cd 目錄名

cd 回到用戶的家目錄

cd ~ 回到-用戶的家目錄

cd - 回到上級切換時目錄

切換到/etc下

[root@localhost html]# cd /etc/

切換到/etc/sysconfig/

[root@localhost sysconfig]# cd /etc/sysconfig/

-h --help

man find

shutdow、init 、reboot

作用:關(guān)機,重啟,定時關(guān)機

-r #重啟

-h #關(guān)機

-h +2 # 2分鐘后關(guān)機

-c

shutdown -h 22:00

作用:切換系統(tǒng)級別

語法:init 0~6

init 0命令用于立即將系統(tǒng)運行級別切換為0,即關(guān)機;

init 6命令用于將系統(tǒng)運行級別切換為6,即重新啟動。

0是關(guān)機

1是單用戶

2是多用戶,不聯(lián)網(wǎng)

3是多用戶

4是不使用的

5是xwindows,也就是有界面的

6是重啟

自己去查下reboot怎么使用吧,這里就不過多介紹了reboot --help

[root@localhost~]# runlevel

N 3

語法:

ln(選項)(參數(shù))

它的功能是為某一個文件在另外一個位置建立一個同不的鏈接,這個命令最常用的參數(shù)是-s,具體用法是:ln –s 源文件 目標文件。

在此我們只介紹下軟鏈接。

我們?yōu)閖s文件夾建一個軟鏈接

我們?yōu)?var/www/html/forestry/js/ 在/root/目錄下建立一個名叫js2的軟鏈接。

圖中我們可以看到j(luò)s2的連接目錄是/var/www/html/forestry/js/

linux命令 sed 請問有哪位大大知道這個sed 命令是什么意思嗎? sed 's/\//\\\//g'

sed 編輯器是 Linux 系統(tǒng)管理員的工具包中最有用的資產(chǎn)之一,

因此,有必要徹底地了解其應(yīng)用

Linux 操作系統(tǒng)最大的一個好處是它帶有各種各樣的實用工具。存在如此之多不同的實用工具,幾乎不可能知道并了解所有這些工具??梢院喕P(guān)鍵情況下操作的一個實用 工具是 sed。它是任何管理員的工具包中最強大的工具之一,并且可以證明它自己在關(guān)鍵情況下非常有價值。

sed 實用工具是一個“編輯器”,但它與其它大多數(shù)編輯器不同。除了不面向屏幕之外,它還是非交互式的。這意味著您必須將要對數(shù)據(jù)執(zhí)行的命令插入到命令行或要處 理的腳本中。當顯示它時,請忘記您在使用 Microsoft Word 或其它大多數(shù)編輯器時擁有的交互式編輯文件功能。sed 在一個文件(或文件集)中非交互式、并且不加詢問地接收一系列的命令并執(zhí)行它們。因而,它流經(jīng)文本就如同水流經(jīng)溪流一樣,因而 sed 恰當?shù)卮砹肆骶庉嬈鳌K梢杂脕韺⑺谐霈F(xiàn)的 "Mr. Smyth" 修改為 "Mr. Smith",或?qū)?"tiger cub" 修改為 "wolf cub"。流編輯器非常適合于執(zhí)行重復(fù)的編輯,這種重復(fù)編輯如果由人工完成將花費大量的時間。其參數(shù)可能和一次性使用一個簡單的操作所需的參數(shù)一樣有限, 或者和一個具有成千上萬行要進行編輯修改的腳本文件一樣復(fù)雜。sed 是 Linux 和 UNIX 工具箱中最有用的工具之一,且使用的參數(shù)非常少。

sed 的工作方式

sed 實用工具按順序逐行將文件讀入到內(nèi)存中。然后,它執(zhí)行為該行指定的所有操作,并在完成請求的修改之后將該行放回到內(nèi)存中,以將其轉(zhuǎn)儲至終端。完成了這一行 上的所有操作之后,它讀取文件的下一行,然后重復(fù)該過程直到它完成該文件。如同前面所提到的,默認輸出是將每一行的內(nèi)容輸出到屏幕上。在這里,開始涉及到 兩個重要的因素—首先,輸出可以被重定向到另一文件中,以保存變化;第二,源文件(默認地)保持不被修改。sed 默認讀取整個文件并對其中的每一行進行修改。不過,可以按需要將操作限制在指定的行上。

該實用工具的語法為:

sed [options] '{command}' [filename]

在這篇文章中,我們將瀏覽最常用的命令和選項,并演示它們?nèi)绾喂ぷ?,以及它們適于在何處使用。

替換命令

sed 實用工具以及其它任何類似的編輯器的最常用的命令之一是用一個值替換另一個值。用來實現(xiàn)這一目的的操作的命令部分語法是:

's/{old value}/{new value}/'

因而,下面演示了如何非常簡單地將 "tiger" 修改為 "wolf":

$ echo The tiger cubs will meet on Tuesday after school | sed

's/tiger/wolf/'

The wolf cubs will meet on Tuesday after school

$

注意如果輸入是源自之前的命令輸出,則不需要指定文件名—同樣的原則也適用于 awk、sort 和其它大多數(shù) LinuxUNIX 命令行實用工具程序。

多次修改

如果需要對同一文件或行作多次修改,可以有三種方法來實現(xiàn)它。第一種是使用 "-e" 選項,它通知程序使用了多條編輯命令。例如:

$ echo The tiger cubs will meet on Tuesday after school | sed -e '

s/tiger/wolf/' -e 's/after/before/'

The wolf cubs will meet on Tuesday before school

$

這是實現(xiàn)它的非常復(fù)雜的方法,因此 "-e" 選項不常被大范圍使用。更好的方法是用分號來分隔命令:

$ echo The tiger cubs will meet on Tuesday after school | sed '

s/tiger/wolf/; s/after/before/'

The wolf cubs will meet on Tuesday before school

$

注 意分號必須是緊跟斜線之后的下一個字符。如果兩者之間有一個空格,操作將不能成功完成,并返回一條錯誤消息。這兩種方法都很好,但許多管理員更喜歡另一種 方法。要注意的一個關(guān)鍵問題是,兩個撇號 (' ') 之間的全部內(nèi)容都被解釋為 sed 命令。直到您輸入了第二個撇號,讀入這些命令的 shell 程序才會認為您完成了輸入。這意味著可以在多行上輸入命令—同時 Linux 將提示符從 PS1 變?yōu)橐粋€延續(xù)提示符(通常為 "")—直到輸入了第二個撇號。一旦輸入了第二個撇號,并且按下了 Enter 鍵,則處理就進行并產(chǎn)生相同的結(jié)果,如下所示:

$ echo The tiger cubs will meet on Tuesday after school | sed '

s/tiger/wolf/

s/after/before/'

The wolf cubs will meet on Tuesday before school

$

全局修改

讓我們開始一次看似簡單的編輯。假定在要修改的消息中出現(xiàn)了多次要修改的項目。默認方式下,結(jié)果可能和預(yù)期的有所不同,如下所示:

$ echo The tiger cubs will meet this Tuesday at the same time

as the meeting last Tuesday | sed 's/Tuesday/Thursday/'

The tiger cubs will meet this Thursday at the same time

as the meeting last Tuesday

$

與 將出現(xiàn)的每個 "Tuesday" 修改為 "Thursday" 相反,sed 編輯器在找到一個要修改的項目并作了修改之后繼續(xù)處理下一行,而不讀整行。sed 命令功能大體上類似于替換命令,這意味著它們都處理每一行中出現(xiàn)的第一個選定序列。為了替換出現(xiàn)的每一個項目,在同一行中出現(xiàn)多個要替換的項目的情況下, 您必須指定在全局進行該操作:

$ echo The tiger cubs will meet this Tuesday at the same time

as the meeting last Tuesday | sed 's/Tuesday/Thursday/g'

The tiger cubs will meet this Thursday at the same time

as the meeting last Thursday

$

請記住不管您要查找的序列是否僅包含一個字符或詞組,這種對全局化的要求都是必需的。

sed 還可以用來修改記錄字段分隔符。例如,以下命令將把所有的 tab 修改為空格:

sed 's// /g'

其 中,第一組斜線之間的項目是一個 tab,而第二組斜線之間的項目是一個空格。作為一條通用的規(guī)則,sed 可以用來將任意的可打印字符修改為任意其它的可打印字符。如果您想將不可打印字符修改為可打印字符—例如,鈴鐺修改為單詞 "bell"—sed 不是適于完成這項工作的工具(但 tr 是)。

有時,您不想修改在一個文件中出現(xiàn)的所有指定項目。有時,您只想在滿足某些條件時才作修改—例如,在與其它一些數(shù)據(jù)匹配之后才作修改。為了說明這一點,請考慮以下文本文件:

$ cat sample_one

one 1

two 1

three 1

one 1

two 1

two 1

three 1

$

假定希望用 "2" 來替換 "1",但僅在單詞 "two" 之后才作替換,而不是每一行的所有位置。通過指定在給出替換命令之前必須存在一次匹配,可以實現(xiàn)這一點:

$ sed '/two/ s/1/2/' sample_one

one 1

two 2

three 1

one 1

two 2

two 2

three 1

$

現(xiàn)在,使其更加準確:

$ sed '

/two/ s/1/2/

/three/ s/1/3/' sample_one

one 1

two 2

three 3

one 1

two 2

two 2

three 3

$

請 再次記住唯一改變了的是顯示。如果您查看源文件,您將發(fā)現(xiàn)它始終保持不變。您必須將輸出保存至另一個文件,以實現(xiàn)永久保存。值得重復(fù)的是,不對源文件作修 改實際是禍中有?!屇軌?qū)ξ募M行試驗而不會造成任何實際的損害,直到讓正確命令以您預(yù)期和希望的方式進行工作。

以下命令將修改后的輸出保存至一個新的文件:

$ sed '

/two/ s/1/2/

/three/ s/1/3/' sample_one sample_two

該輸出文件將所有修改合并在其中,并且這些修改通常將在屏幕上顯示?,F(xiàn)在可以用 head、cat 或任意其它類似的實用工具來進行查看。

腳本文件

sed 工具允許您創(chuàng)建一個腳本文件,其中包含從該文件而不是在命令行進行處理的命令,并且 sed 工具通過 "-f" 選項來引用。通過創(chuàng)建一個腳本文件,您能夠一次又一次地重復(fù)運行相同的操作,并指定比每次希望從命令行進行處理的操作詳細得多的操作。

考慮以下腳本文件:

$ cat sedlist

/two/ s/1/2/

/three/ s/1/3/

$

現(xiàn)在可以在數(shù)據(jù)文件上使用腳本文件,獲得和我們之前看到的相同的結(jié)果:

$ sed -f sedlist sample_one

one 1

two 2

three 3

one 1

two 2

two 2

three 3

$

注意當調(diào)用 "-f" 選項時,在源文件內(nèi)或命令行中不使用撇號。腳本文件,也稱為源文件,對于想重復(fù)多次的操作和從命令行運行可能出錯的復(fù)雜命令很有價值。編輯源文件并修改一個字符比在命令行中重新輸入一條多行的項目要容易得多。

限制行

編輯器默認查看輸入到流編輯器中的每一行,且默認在輸入到流編輯器中的每一行上進行編輯。這可以通過在發(fā)出命令之前指定約束條件來進行修改。例如,只在此示例文件的輸出的第 5 和第 6 行中用 "2" 來替換 "1",命令將為:

$ sed '5,6 s/1/2/' sample_one

one 1

two 1

three 1

one 1

two 2

two 2

three 1

$

在這種情況下,因為要修改的行是專門指定的,所以不需要替換命令。因此,您可以靈活地根據(jù)匹配準則(可以是行號或一種匹配模式)來選擇要修改哪些行(從根本上限制修改)。

禁止顯示

sed 默認將來自源文件的每一行顯示到屏幕上(或重定向到一個文件中),而無論該行是否受到編輯操作的影響,"-n" 參數(shù)覆蓋了這一操作。"-n" 覆蓋了所有的顯示,并且不顯示任何一行,而無論它們是否被編輯操作修改。例如:

$ sed -n -f sedlist sample_one

$

$ sed -n -f sedlist sample_one sample_two

$ cat sample_two

$

在 第一個示例中,屏幕上不顯示任何東西。在第二個示例中,不修改任何東西,因此不將任何東西寫到新的文件中—它最后是空的。這不是否定了編輯的全部目的嗎? 為什么這是有用的?它是有用的僅因為 "-n" 選項能夠被一條顯示命令 (-p) 覆蓋。為了說明這一點,假定現(xiàn)在像下面這樣對腳本文件進行了修改:

$ cat sedlist

/two/ s/1/2/p

/three/ s/1/3/p

$

然后下面是運行它的結(jié)果:

$ sed -n -f sedlist sample_one

two 2

three 3

two 2

two 2

three 3

$

保持不變的行全部不被顯示。只有受到編輯操作影響的行被顯示了。在這種方式下,可以僅取出這些行,進行修改,然后把它們放到一個單獨的文件中:

$ sed -n -f sedlist sample_one sample_two

$

$ cat sample_two

two 2

three 3

two 2

two 2

three 3

$

利用它的另一種方法是只顯示一定數(shù)量的行。例如,只顯示 2-6 行,同時不做其它的編輯修改:

$ sed -n '2,6p' sample_one

two 1

three 1

one 1

two 1

two 1

$

其它所有的行被忽略,只有 2-6 行作為輸出顯示。這是一項出色的功能,其它任何工具都不能容易地實現(xiàn)。Head 將顯示一個文件的頂部,而 tail 將顯示一個文件的底部,但 sed 允許從任意位置取出想要的任意內(nèi)容。

刪除行

用一個值替換另一個值遠非流編輯器可以執(zhí)行的唯一功能。它還具有許多的潛在功能,在我看來第二種最常用的功能是刪除。刪除與替換的工作方式相同,只是它刪除指定的行(如果您想要刪除一個單詞而不是一行,不要考慮刪除,而應(yīng)考慮用空的內(nèi)容來替換它—s/cat//)。

該命令的語法是:

'{what to find} d'

從 sample_one 文件中刪除包含 "two" 的所有行:

$ sed '/two/ d' sample_one

one 1

three 1

one 1

three 1

$

從顯示屏中刪除前三行,而不管它們的內(nèi)容是什么:

$ sed '1,3 d' sample_one

one 1

two 1

two 1

three 1

$

只顯示剩下的行,前三行不在顯示屏中出現(xiàn)。對于流編輯器,一般當它們涉及到全局表達式時,特別是應(yīng)用于刪除操作時,有幾點要記?。?/p>

上三角號 (^) 表示一行的開始,因此,如果 "two" 是該行的頭三個字符,則

sed '/^two/ d' sample_one

將只刪除該行。

美元符號 ($) 代表文件的結(jié)尾,或一行的結(jié)尾,因此,如果 "two" 是該行的最后三個字符,則

sed '/two$/ d' sample_one

將只刪除該行。

將這兩者結(jié)合在一起的結(jié)果:

sed '/^$/ d' {filename}

刪除文件中的所有空白行。例如,以下命令將 "1" 替換為 "2",以及將 "1" 替換為 "3",并刪除文件中所有尾隨的空行:

$ sed '/two/ s/1/2/; /three/ s/1/3/; /^$/ d' sample_one

one 1

two 1

three 1

one 1

two 2

two 2

three 1

$

其通常的用途是刪除一個標題。以下命令將刪除文件中所有的行,從第一行直到第一個空行:

sed '1,/^$/ d' {filename}

添加和插入文本

可以結(jié)合使用 sed 和 "a" 選項將文本添加到一個文件的末尾。實現(xiàn)方法如下:

$ sed '$a

This is where we stop

the test' sample_one

one 1

two 1

three 1

one 1

two 1

two 1

three 1

This is where we stop

the test

$

在該命令中,美元符號 ($) 表示文本將被添加到文件的末尾。反斜線 () 是必需的,它表示將插入一個回車符。如果它們被遺漏了,則將導(dǎo)致一個錯誤,顯示該命令是錯亂的;在任何要輸入回車的地方您必須使用反斜線。

要將這些行添加到第 4 和第 5 個位置而不是末尾,則命令變?yōu)椋?/p>

$ sed '3a

This is where we stop

the test' sample_one

one 1

two 1

three 1

This is where we stop

the test

one 1

two 1

two 1

three 1

$

這將文本添加到第 3 行之后。和幾乎所有的編輯器一樣,您可以選擇插入而不是添加(如果您希望這樣的話)。這兩者的區(qū)別是添加跟在指定的行之后,而插入從指定的行開始。當用插入來代替添加時,只需用 "i" 來代替 "a",如下所示:

$ sed '3i

This is where we stop

the test' sample_one

one 1

two 1

This is where we stop

the test

three 1

one 1

two 1

two 1

three 1

$

新的文本出現(xiàn)在輸出的中間位置,而處理通常在指定的操作執(zhí)行以后繼續(xù)進行。

讀寫文件

重定向輸出的功能已經(jīng)演示過了,但需要指出的是,在編輯命令運行期間可以同步地讀入和寫出文件。例如,執(zhí)行替換,并將 1-3 行寫到名稱為 sample_three 的文件中:

$ sed '

/two/ s/1/2/

/three/ s/1/3/

1,3 w sample_three' sample_one

one 1

two 2

three 3

one 1

two 2

two 2

three 3

$

$ cat sample_three

one 1

two 2

three 3

$

由于為 w (write) 命令指定了 "1,3",所以只有指定的行被寫到了新文件中。無論被寫的是哪些行,所有的行都在默認輸出中顯示。

修改命令

除了替換項目之外,還可以將行從一個值修改為另一個值。要記住的是,替換是對字符逐個進行,而修改功能與刪除類似,它影響整行:

$ sed '/two/ c

We are no longer using two' sample_one

one 1

We are no longer using two

three 1

one 1

We are no longer using two

We are no longer using two

three 1

$

修 改命令與替換的工作方式很相似,但在范圍上要更大些—將一個項目完全替換為另一個項目,而無論字符內(nèi)容或上下文??鋸堃稽c講,當使用替換時,只有字符 "1" 被字符 "2" 替換,而當使用修改時,原來的整行將被修改。在兩種情況下,要尋找的匹配條件都僅為 "two"。

修改全部但……

對于大多數(shù) sed 命令,詳細說明各種功能要進行何種修改。利用感嘆號,可以在除指定位置之外的任何地方執(zhí)行修改—與默認的操作完全相反。

例如,要刪除包含單詞 "two" 的所有行,操作為:

$ sed '/two/ d' sample_one

one 1

three 1

one 1

three 1

$

而要刪除除包含單詞 "two" 的行之外的所有行,則語法變?yōu)椋?/p>

$ sed '/two/ !d' sample_one

two 1

two 1

two 1

$

如果您有一個文件包含一系列項目,并且想對文件中的每個項目執(zhí)行一個操作,那么首先對那些項目進行一次智能掃描并考慮將要做什么是很重要的。為了使事情變得更簡單,您可以將 sed 與任意迭代例程(for、while、until)結(jié)合來實現(xiàn)這一目的。

比如說,假定您有一個名為 "animals" 的文件,其中包含以下項目:

pig

horse

elephant

cow

dog

cat

您希望運行以下例程:

#mcd.ksh

for I in $*

do

echo Old McDonald had a $I

echo E-I, E-I-O

done

結(jié) 果將為,每一行都顯示在 "Old McDonald has a" 的末尾。雖然對于這些項目的大部分這是正確的,但對于 "elephant" 項目,它有語法錯誤,因為結(jié)果應(yīng)當為 "an elephant" 而不是 "a elephant"。利用 sed,您可以在來自 shell 文件的輸出中檢查這種語法錯誤,并通過首先創(chuàng)建一個命令文件來即時地更正它們:

#sublist

/ a a/ s/ a / an /

/ a e/ s/ a / an /

/a i/ s / a / an /

/a o/ s/ a / an /

/a u/ s/ a / an /

然后執(zhí)行以下過程:

$ sh mcd.ksh 'cat animals' | sed -f sublist

現(xiàn) 在,在運行了 mcd 腳本之后,sed 將在輸出中搜索單個字母 a (空格,"a",空格)之后緊跟了一個元音的任意位置。如果這種位置存在,它將把該序列修改為空格,"an",空格。這樣就使問題更正后才顯示在屏幕上, 并確保各處的編輯人員在晚上可以更容易地入睡。結(jié)果是:

Old McDonald had a pig

E-I, E-I-O

Old McDonald had a horse

E-I, E-I-O

Old McDonald had an elephant

E-I, E-I-O

Old McDonald had a cow

E-I, E-I-O

Old McDonald had a dog

E-I, E-I-O

Old McDonald had a cat

E-I, E-I-O

提前退出

sed 默認讀取整個文件,并只在到達末尾時才停止。不過,您可以使用退出命令提前停止處理。只能指定一條退出命令,而處理將一直持續(xù)直到滿足調(diào)用退出命令的條件。

例如,僅在文件的前五行上執(zhí)行替換,然后退出:

$ sed '

/two/ s/1/2/

/three/ s/1/3/

5q' sample_one

one 1

two 2

three 3

one 1

two 2

$

在退出命令之前的項目可以是一個行號(如上所示),或者一條查找/匹配命令:

$ sed '

/two/ s/1/2/

/three/ s/1/3/

/three/q' sample_one

one 1

two 2

three 3

$

您 還可以使用退出命令來查看超過一定標準數(shù)目的行,并增加比 head 中的功能更強的功能。例如,head 命令允許您指定您想要查看一個文件的前多少行—默認數(shù)為 10,但可以使用從 1 到 99 的任意一個數(shù)字。如果您想查看一個文件的前 110 行,您用 head 不能實現(xiàn)這一目的,但用 sed 可以:

sed 110q filename

處理問題

當使用 sed 時,要記住的重要事項是它的工作方式。它的工作方式是:讀入一行,在該行上執(zhí)行它已知要執(zhí)行的所有任務(wù),然后繼續(xù)處理下一行。每一行都受給定的每一個編輯命令的影響。

如果您的操作順序沒有十分徹底地考慮清楚,那么這可能會很麻煩。例如,假定您需要將所有的 "two" 項目修改為 "three",然后將所有的 "three" 修改為 "four":

$ sed '

/two/ s/two/three/

/three/ s/three/four/' sample_one

one 1

four 1

four 1

one 1

four 1

four 1

four 1

$

最初讀取的 "two" 被修改為 "three"。然后它滿足為下一次編輯建立的準則,從而變?yōu)?"four"。最終的結(jié)果不是想要的結(jié)果—現(xiàn)在除了 "four" 沒有別的項目了,而本來應(yīng)該有 "three" 和 "four"。

當執(zhí)行這種操作時,您必須非常用心地注意指定操作的方式,并按某種順序來安排它們,使得操作之間不會互相影響。例如:

$ sed '

/three/ s/three/four/

/two/ s/two/three/' sample_one

one 1

three 1

four 1

one 1

three 1

three 1

four 1

$

這非常有效,因為 "three" 值在 "two" 變成 "three" 之前得到修改。

標簽和注釋

可以在 sed 腳本文件中放置標簽,這樣一旦文件變得龐大,可以更容易地說明正在發(fā)生的事情。存在各種各樣與這些標簽相關(guān)的命令,它們包括:

接下來的步驟

訪問并收藏 Linux 技術(shù)中心

閱讀 Dale Dougherty 和 Arnold Robbins 的著作 sed awk, 2nd Edition (O'Reilly Associates 出版社)。

: 冒號表示一個標簽名稱。例如:

:HERE

以冒號開始的標簽可以由 "b" 和 "t" 命令處理。

b {label} 充當 "goto" 語句的作用,將處理發(fā)送至前面有一個冒號的標簽。例如,

b HERE

將處理發(fā)送給行

:HERE

如果緊跟 b 之后沒有指定任何標簽,則處理轉(zhuǎn)至腳本文件的末尾。

t {label} 只要自上次輸入行或執(zhí)行一次 "t" 命令以來進行了替換操作,就轉(zhuǎn)至該標簽。和 "b" 一樣,如果沒有給定標簽名,則處理轉(zhuǎn)至腳本文件的末尾。

# 符號作為一行的第一個字符將使整行被當作注釋處理。注釋行與標簽不同,不能使用 b 或 t 命令來轉(zhuǎn)到注釋行上。

Linux中 / 表示什么指令

表示任意幾個字符串,其他具體的參考如下:

1. 重定向輸出符號。

2. 重定向輸出符號,但有追加的功能。

3. 2錯誤重定向輸出符號,覆蓋原文件內(nèi)容。

4. 2錯誤重定向輸出符號,有文件內(nèi)容追加的功能。重定向:I/O。Linux Shell 環(huán)境中支持輸入輸出重定向,用符號來表示。0、1和2分別表示標準輸入、標準輸出和標準錯誤信息輸出,可以用來指定需要重定向的標準輸入或輸出,比如 2a.txt 表示將錯誤信息輸出到文件a.txt中。

5. * 代表0個或者多個特殊字符

6. ?匹配任意一個字符。

7. | 管道符號。解釋:command1|command2,將command1的輸出作為command2的輸入,比如ls -al|less,表示將ls -al的輸出作為less的輸入,即將la -al的輸出分頁。管道命令只接受標準輸入(standoutput)。

8. 后臺進程符。

9. l邏輯與符號。用法:命令1 命令2 表示如果命令1執(zhí)行成功,繼續(xù)執(zhí)行命令2。

10.|| 邏輯或符號。用法:命令1 | | 命令2 表示如果命令1執(zhí)行成功,不執(zhí)行命令2;但如果命令1執(zhí)行失敗才執(zhí)行命令2。

與||,命令執(zhí)行是順序進行的,沒有優(yōu)先級

11.!邏輯非符號。排除指定范圍。例:ls a[!0-9]

12.[x-y]表示一定的范圍。

13.# 注釋符;符合替換文字最短的那一個。

14.” ” 雙引號表示把它所包含的內(nèi)容作為普通字符,但` ` $ \ ‘ ‘ 幾個符號除外。

15.’ ’ 單引號表示把它所包含的內(nèi)容作為普通的字符,無特殊例外。

16.$ 變量符,提取變量,如echo $HOME,查看變量;正則表達式中表示行首。

17.\ 轉(zhuǎn)義字符,就是將特殊字符轉(zhuǎn)換成其本來的普通字符的意思。

18.``反單引號,表示它所包含的內(nèi)容。一般作為嵌入的命令使用,此命令將先執(zhí)行。

19.;命令分隔符。

20. 重定向輸入符。

21.()表示整體執(zhí)行命令。

22.^反向選擇符,例:grep -n '^[^a-zA-Z]' wokao.txt,[]內(nèi)的叫反向選擇符,[]外的則表示定位在行首。查找行首不是英文字母的行。

23. . 點該表任意字符串

linux反撇號怎么打出來

如果您的鍵盤支持反撇號(`)的話,反撇號和波浪符號(~)占同一個字符。位于ESC鍵下方,數(shù)字1或!左邊。反撇號在下,波浪符號在上。這是基于英文輸入模式。如果是中文輸入,分別輸出(·)和(~),波浪號一樣,但(`)變成了(·)

linux里面的sed命令怎么用,做什么的?請詳細說明

sed 編輯器是 Linux 系統(tǒng)管理員的工具包中最有用的資產(chǎn)之一

Linux 操作系統(tǒng)最大的一個好處是它帶有各種各樣的實用工具。存在如此之多不同的實用工具,幾乎不可能知道并了解所有這些工具。可以簡化關(guān)鍵情況下操作的一個實用 工具是 sed。它是任何管理員的工具包中最強大的工具之一,并且可以證明它自己在關(guān)鍵情況下非常有價值。

sed 實用工具是一個“編輯器”,但它與其它大多數(shù)編輯器不同。除了不面向屏幕之外,它還是非交互式的。這意味著您必須將要對數(shù)據(jù)執(zhí)行的命令插入到命令行或要處 理的腳本中。當顯示它時,請忘記您在使用 Microsoft Word 或其它大多數(shù)編輯器時擁有的交互式編輯文件功能。sed 在一個文件(或文件集)中非交互式、并且不加詢問地接收一系列的命令并執(zhí)行它們。因而,它流經(jīng)文本就如同水流經(jīng)溪流一樣,因而 sed 恰當?shù)卮砹肆骶庉嬈?。它可以用來將所有出現(xiàn)的 "Mr. Smyth" 修改為 "Mr. Smith",或?qū)?"tiger cub" 修改為 "wolf cub"。流編輯器非常適合于執(zhí)行重復(fù)的編輯,這種重復(fù)編輯如果由人工完成將花費大量的時間。其參數(shù)可能和一次性使用一個簡單的操作所需的參數(shù)一樣有限, 或者和一個具有成千上萬行要進行編輯修改的腳本文件一樣復(fù)雜。sed 是 Linux 和 UNIX 工具箱中最有用的工具之一,且使用的參數(shù)非常少。

sed 的工作方式

sed 實用工具按順序逐行將文件讀入到內(nèi)存中。然后,它執(zhí)行為該行指定的所有操作,并在完成請求的修改之后將該行放回到內(nèi)存中,以將其轉(zhuǎn)儲至終端。完成了這一行 上的所有操作之后,它讀取文件的下一行,然后重復(fù)該過程直到它完成該文件。如同前面所提到的,默認輸出是將每一行的內(nèi)容輸出到屏幕上。在這里,開始涉及到 兩個重要的因素—首先,輸出可以被重定向到另一文件中,以保存變化;第二,源文件(默認地)保持不被修改。sed 默認讀取整個文件并對其中的每一行進行修改。不過,可以按需要將操作限制在指定的行上。

該實用工具的語法為:

sed [options] '{command}' [filename]

在這篇文章中,我們將瀏覽最常用的命令和選項,并演示它們?nèi)绾喂ぷ?,以及它們適于在何處使用。

替換命令

sed 實用工具以及其它任何類似的編輯器的最常用的命令之一是用一個值替換另一個值。用來實現(xiàn)這一目的的操作的命令部分語法是:

's/{old value}/{new value}/'

因而,下面演示了如何非常簡單地將 "tiger" 修改為 "wolf":

$ echo The tiger cubs will meet on Tuesday after school | sed

's/tiger/wolf/'

The wolf cubs will meet on Tuesday after school

$

注意如果輸入是源自之前的命令輸出,則不需要指定文件名—同樣的原則也適用于 awk、sort 和其它大多數(shù) LinuxUNIX 命令行實用工具程序。

多次修改

如果需要對同一文件或行作多次修改,可以有三種方法來實現(xiàn)它。第一種是使用 "-e" 選項,它通知程序使用了多條編輯命令。例如:

$ echo The tiger cubs will meet on Tuesday after school | sed -e '

s/tiger/wolf/' -e 's/after/before/'

The wolf cubs will meet on Tuesday before school

$

這是實現(xiàn)它的非常復(fù)雜的方法,因此 "-e" 選項不常被大范圍使用。更好的方法是用分號來分隔命令:

$ echo The tiger cubs will meet on Tuesday after school | sed '

s/tiger/wolf/; s/after/before/'

The wolf cubs will meet on Tuesday before school

$

注 意分號必須是緊跟斜線之后的下一個字符。如果兩者之間有一個空格,操作將不能成功完成,并返回一條錯誤消息。這兩種方法都很好,但許多管理員更喜歡另一種 方法。要注意的一個關(guān)鍵問題是,兩個撇號 (' ') 之間的全部內(nèi)容都被解釋為 sed 命令。直到您輸入了第二個撇號,讀入這些命令的 shell 程序才會認為您完成了輸入。這意味著可以在多行上輸入命令—同時 Linux 將提示符從 PS1 變?yōu)橐粋€延續(xù)提示符(通常為 "")—直到輸入了第二個撇號。一旦輸入了第二個撇號,并且按下了 Enter 鍵,則處理就進行并產(chǎn)生相同的結(jié)果,如下所示:

$ echo The tiger cubs will meet on Tuesday after school | sed '

s/tiger/wolf/

s/after/before/'

The wolf cubs will meet on Tuesday before school

$

全局修改

讓我們開始一次看似簡單的編輯。假定在要修改的消息中出現(xiàn)了多次要修改的項目。默認方式下,結(jié)果可能和預(yù)期的有所不同,如下所示:

$ echo The tiger cubs will meet this Tuesday at the same time

as the meeting last Tuesday | sed 's/Tuesday/Thursday/'

The tiger cubs will meet this Thursday at the same time

as the meeting last Tuesday

$

與 將出現(xiàn)的每個 "Tuesday" 修改為 "Thursday" 相反,sed 編輯器在找到一個要修改的項目并作了修改之后繼續(xù)處理下一行,而不讀整行。sed 命令功能大體上類似于替換命令,這意味著它們都處理每一行中出現(xiàn)的第一個選定序列。為了替換出現(xiàn)的每一個項目,在同一行中出現(xiàn)多個要替換的項目的情況下, 您必須指定在全局進行該操作:

$ echo The tiger cubs will meet this Tuesday at the same time

as the meeting last Tuesday | sed 's/Tuesday/Thursday/g'

The tiger cubs will meet this Thursday at the same time

as the meeting last Thursday

$

請記住不管您要查找的序列是否僅包含一個字符或詞組,這種對全局化的要求都是必需的。

sed 還可以用來修改記錄字段分隔符。例如,以下命令將把所有的 tab 修改為空格:

sed 's// /g'

其 中,第一組斜線之間的項目是一個 tab,而第二組斜線之間的項目是一個空格。作為一條通用的規(guī)則,sed 可以用來將任意的可打印字符修改為任意其它的可打印字符。如果您想將不可打印字符修改為可打印字符—例如,鈴鐺修改為單詞 "bell"—sed 不是適于完成這項工作的工具(但 tr 是)。

有時,您不想修改在一個文件中出現(xiàn)的所有指定項目。有時,您只想在滿足某些條件時才作修改—例如,在與其它一些數(shù)據(jù)匹配之后才作修改。為了說明這一點,請考慮以下文本文件:

$ cat sample_one

one 1

two 1

three 1

one 1

two 1

two 1

three 1

$

假定希望用 "2" 來替換 "1",但僅在單詞 "two" 之后才作替換,而不是每一行的所有位置。通過指定在給出替換命令之前必須存在一次匹配,可以實現(xiàn)這一點:

$ sed '/two/ s/1/2/' sample_one

one 1

two 2

three 1

one 1

two 2

two 2

three 1

$

現(xiàn)在,使其更加準確:

$ sed '

/two/ s/1/2/

/three/ s/1/3/' sample_one

one 1

two 2

three 3

one 1

two 2

two 2

three 3

$

請 再次記住唯一改變了的是顯示。如果您查看源文件,您將發(fā)現(xiàn)它始終保持不變。您必須將輸出保存至另一個文件,以實現(xiàn)永久保存。值得重復(fù)的是,不對源文件作修 改實際是禍中有福—它讓您能夠?qū)ξ募M行試驗而不會造成任何實際的損害,直到讓正確命令以您預(yù)期和希望的方式進行工作。

以下命令將修改后的輸出保存至一個新的文件:

$ sed '

/two/ s/1/2/

/three/ s/1/3/' sample_one sample_two

該輸出文件將所有修改合并在其中,并且這些修改通常將在屏幕上顯示。現(xiàn)在可以用 head、cat 或任意其它類似的實用工具來進行查看。

腳本文件

sed 工具允許您創(chuàng)建一個腳本文件,其中包含從該文件而不是在命令行進行處理的命令,并且 sed 工具通過 "-f" 選項來引用。通過創(chuàng)建一個腳本文件,您能夠一次又一次地重復(fù)運行相同的操作,并指定比每次希望從命令行進行處理的操作詳細得多的操作。

考慮以下腳本文件:

$ cat sedlist

/two/ s/1/2/

/three/ s/1/3/

$

現(xiàn)在可以在數(shù)據(jù)文件上使用腳本文件,獲得和我們之前看到的相同的結(jié)果:

$ sed -f sedlist sample_one

one 1

two 2

three 3

one 1

two 2

two 2

three 3

$

注意當調(diào)用 "-f" 選項時,在源文件內(nèi)或命令行中不使用撇號。腳本文件,也稱為源文件,對于想重復(fù)多次的操作和從命令行運行可能出錯的復(fù)雜命令很有價值。編輯源文件并修改一個字符比在命令行中重新輸入一條多行的項目要容易得多。

限制行

編輯器默認查看輸入到流編輯器中的每一行,且默認在輸入到流編輯器中的每一行上進行編輯。這可以通過在發(fā)出命令之前指定約束條件來進行修改。例如,只在此示例文件的輸出的第 5 和第 6 行中用 "2" 來替換 "1",命令將為:

$ sed '5,6 s/1/2/' sample_one

one 1

two 1

three 1

one 1

two 2

two 2

three 1

$

在這種情況下,因為要修改的行是專門指定的,所以不需要替換命令。因此,您可以靈活地根據(jù)匹配準則(可以是行號或一種匹配模式)來選擇要修改哪些行(從根本上限制修改)。

禁止顯示

sed 默認將來自源文件的每一行顯示到屏幕上(或重定向到一個文件中),而無論該行是否受到編輯操作的影響,"-n" 參數(shù)覆蓋了這一操作。"-n" 覆蓋了所有的顯示,并且不顯示任何一行,而無論它們是否被編輯操作修改。例如:

$ sed -n -f sedlist sample_one

$

$ sed -n -f sedlist sample_one sample_two

$ cat sample_two

$

在 第一個示例中,屏幕上不顯示任何東西。在第二個示例中,不修改任何東西,因此不將任何東西寫到新的文件中—它最后是空的。這不是否定了編輯的全部目的嗎? 為什么這是有用的?它是有用的僅因為 "-n" 選項能夠被一條顯示命令 (-p) 覆蓋。為了說明這一點,假定現(xiàn)在像下面這樣對腳本文件進行了修改:

$ cat sedlist

/two/ s/1/2/p

/three/ s/1/3/p

$

然后下面是運行它的結(jié)果:

$ sed -n -f sedlist sample_one

two 2

three 3

two 2

two 2

three 3

$

保持不變的行全部不被顯示。只有受到編輯操作影響的行被顯示了。在這種方式下,可以僅取出這些行,進行修改,然后把它們放到一個單獨的文件中:

$ sed -n -f sedlist sample_one sample_two

$

$ cat sample_two

two 2

three 3

two 2

two 2

three 3

$

利用它的另一種方法是只顯示一定數(shù)量的行。例如,只顯示 2-6 行,同時不做其它的編輯修改:

$ sed -n '2,6p' sample_one

two 1

three 1

one 1

two 1

two 1

$

其它所有的行被忽略,只有 2-6 行作為輸出顯示。這是一項出色的功能,其它任何工具都不能容易地實現(xiàn)。Head 將顯示一個文件的頂部,而 tail 將顯示一個文件的底部,但 sed 允許從任意位置取出想要的任意內(nèi)容。

刪除行

用一個值替換另一個值遠非流編輯器可以執(zhí)行的唯一功能。它還具有許多的潛在功能,在我看來第二種最常用的功能是刪除。刪除與替換的工作方式相同,只是它刪除指定的行(如果您想要刪除一個單詞而不是一行,不要考慮刪除,而應(yīng)考慮用空的內(nèi)容來替換它—s/cat//)。

該命令的語法是:

'{what to find} d'

從 sample_one 文件中刪除包含 "two" 的所有行:

$ sed '/two/ d' sample_one

one 1

three 1

one 1

three 1

$

從顯示屏中刪除前三行,而不管它們的內(nèi)容是什么:

$ sed '1,3 d' sample_one

one 1

two 1

two 1

three 1

$

只顯示剩下的行,前三行不在顯示屏中出現(xiàn)。對于流編輯器,一般當它們涉及到全局表達式時,特別是應(yīng)用于刪除操作時,有幾點要記?。?/p>

上三角號 (^) 表示一行的開始,因此,如果 "two" 是該行的頭三個字符,則

sed '/^two/ d' sample_one

將只刪除該行。

美元符號 ($) 代表文件的結(jié)尾,或一行的結(jié)尾,因此,如果 "two" 是該行的最后三個字符,則

sed '/two$/ d' sample_one

將只刪除該行。

將這兩者結(jié)合在一起的結(jié)果:

sed '/^$/ d' {filename}

刪除文件中的所有空白行。例如,以下命令將 "1" 替換為 "2",以及將 "1" 替換為 "3",并刪除文件中所有尾隨的空行:

$ sed '/two/ s/1/2/; /three/ s/1/3/; /^$/ d' sample_one

one 1

two 1

three 1

one 1

two 2

two 2

three 1

$

其通常的用途是刪除一個標題。以下命令將刪除文件中所有的行,從第一行直到第一個空行:

sed '1,/^$/ d' {filename}

添加和插入文本

可以結(jié)合使用 sed 和 "a" 選項將文本添加到一個文件的末尾。實現(xiàn)方法如下:

$ sed '$a

This is where we stop

the test' sample_one

one 1

two 1

three 1

one 1

two 1

two 1

three 1

This is where we stop

the test

$

在該命令中,美元符號 ($) 表示文本將被添加到文件的末尾。反斜線 () 是必需的,它表示將插入一個回車符。如果它們被遺漏了,則將導(dǎo)致一個錯誤,顯示該命令是錯亂的;在任何要輸入回車的地方您必須使用反斜線。

要將這些行添加到第 4 和第 5 個位置而不是末尾,則命令變?yōu)椋?/p>

$ sed '3a

This is where we stop

the test' sample_one

one 1

two 1

three 1

This is where we stop

the test

one 1

two 1

two 1

three 1

$

這將文本添加到第 3 行之后。和幾乎所有的編輯器一樣,您可以選擇插入而不是添加(如果您希望這樣的話)。這兩者的區(qū)別是添加跟在指定的行之后,而插入從指定的行開始。當用插入來代替添加時,只需用 "i" 來代替 "a",如下所示:

$ sed '3i

This is where we stop

the test' sample_one

one 1

two 1

This is where we stop

the test

three 1

one 1

two 1

two 1

three 1

$

新的文本出現(xiàn)在輸出的中間位置,而處理通常在指定的操作執(zhí)行以后繼續(xù)進行。

讀寫文件

重定向輸出的功能已經(jīng)演示過了,但需要指出的是,在編輯命令運行期間可以同步地讀入和寫出文件。例如,執(zhí)行替換,并將 1-3 行寫到名稱為 sample_three 的文件中:

$ sed '

/two/ s/1/2/

/three/ s/1/3/

1,3 w sample_three' sample_one

one 1

two 2

three 3

one 1

two 2

two 2

three 3

$

$ cat sample_three

one 1

two 2

three 3

$

由于為 w (write) 命令指定了 "1,3",所以只有指定的行被寫到了新文件中。無論被寫的是哪些行,所有的行都在默認輸出中顯示。

修改命令

除了替換項目之外,還可以將行從一個值修改為另一個值。要記住的是,替換是對字符逐個進行,而修改功能與刪除類似,它影響整行:

$ sed '/two/ c

We are no longer using two' sample_one

one 1

We are no longer using two

three 1

one 1

We are no longer using two

We are no longer using two

three 1

$

修 改命令與替換的工作方式很相似,但在范圍上要更大些—將一個項目完全替換為另一個項目,而無論字符內(nèi)容或上下文??鋸堃稽c講,當使用替換時,只有字符 "1" 被字符 "2" 替換,而當使用修改時,原來的整行將被修改。在兩種情況下,要尋找的匹配條件都僅為 "two"。

修改全部但……

對于大多數(shù) sed 命令,詳細說明各種功能要進行何種修改。利用感嘆號,可以在除指定位置之外的任何地方執(zhí)行修改—與默認的操作完全相反。

例如,要刪除包含單詞 "two" 的所有行,操作為:

$ sed '/two/ d' sample_one

one 1

three 1

one 1

three 1

$

而要刪除除包含單詞 "two" 的行之外的所有行,則語法變?yōu)椋?/p>

$ sed '/two/ !d' sample_one

two 1

two 1

two 1

$

如果您有一個文件包含一系列項目,并且想對文件中的每個項目執(zhí)行一個操作,那么首先對那些項目進行一次智能掃描并考慮將要做什么是很重要的。為了使事情變得更簡單,您可以將 sed 與任意迭代例程(for、while、until)結(jié)合來實現(xiàn)這一目的。

比如說,假定您有一個名為 "animals" 的文件,其中包含以下項目:

pig

horse

elephant

cow

dog

cat

您希望運行以下例程:

#mcd.ksh

for I in $*

do

echo Old McDonald had a $I

echo E-I, E-I-O

done

結(jié) 果將為,每一行都顯示在 "Old McDonald has a" 的末尾。雖然對于這些項目的大部分這是正確的,但對于 "elephant" 項目,它有語法錯誤,因為結(jié)果應(yīng)當為 "an elephant" 而不是 "a elephant"。利用 sed,您可以在來自 shell 文件的輸出中檢查這種語法錯誤,并通過首先創(chuàng)建一個命令文件來即時地更正它們:

#sublist

/ a a/ s/ a / an /

/ a e/ s/ a / an /

/a i/ s / a / an /

/a o/ s/ a / an /

/a u/ s/ a / an /

然后執(zhí)行以下過程:

$ sh mcd.ksh 'cat animals' | sed -f sublist

現(xiàn) 在,在運行了 mcd 腳本之后,sed 將在輸出中搜索單個字母 a (空格,"a",空格)之后緊跟了一個元音的任意位置。如果這種位置存在,它將把該序列修改為空格,"an",空格。這樣就使問題更正后才顯示在屏幕上, 并確保各處的編輯人員在晚上可以更容易地入睡。結(jié)果是:

Old McDonald had a pig

E-I, E-I-O

Old McDonald had a horse

E-I, E-I-O

Old McDonald had an elephant

E-I, E-I-O

Old McDonald had a cow

E-I, E-I-O

Old McDonald had a dog

E-I, E-I-O

Old McDonald had a cat

E-I, E-I-O

提前退出

sed 默認讀取整個文件,并只在到達末尾時才停止。不過,您可以使用退出命令提前停止處理。只能指定一條退出命令,而處理將一直持續(xù)直到滿足調(diào)用退出命令的條件。

例如,僅在文件的前五行上執(zhí)行替換,然后退出:

$ sed '

/two/ s/1/2/

/three/ s/1/3/

5q' sample_one

one 1

two 2

three 3

one 1

two 2

$

在退出命令之前的項目可以是一個行號(如上所示),或者一條查找/匹配命令:

$ sed '

/two/ s/1/2/

/three/ s/1/3/

/three/q' sample_one

one 1

two 2

three 3

$

您 還可以使用退出命令來查看超過一定標準數(shù)目的行,并增加比 head 中的功能更強的功能。例如,head 命令允許您指定您想要查看一個文件的前多少行—默認數(shù)為 10,但可以使用從 1 到 99 的任意一個數(shù)字。如果您想查看一個文件的前 110 行,您用 head 不能實現(xiàn)這一目的,但用 sed 可以:

sed 110q filename

處理問題

當使用 sed 時,要記住的重要事項是它的工作方式。它的工作方式是:讀入一行,在該行上執(zhí)行它已知要執(zhí)行的所有任務(wù),然后繼續(xù)處理下一行。每一行都受給定的每一個編輯命令的影響。

如果您的操作順序沒有十分徹底地考慮清楚,那么這可能會很麻煩。例如,假定您需要將所有的 "two" 項目修改為 "three",然后將所有的 "three" 修改為 "four":

$ sed '

/two/ s/two/three/

/three/ s/three/four/' sample_one

one 1

four 1

four 1

one 1

four 1

four 1

four 1

$

最初讀取的 "two" 被修改為 "three"。然后它滿足為下一次編輯建立的準則,從而變?yōu)?"four"。最終的結(jié)果不是想要的結(jié)果—現(xiàn)在除了 "four" 沒有別的項目了,而本來應(yīng)該有 "three" 和 "four"。

當執(zhí)行這種操作時,您必須非常用心地注意指定操作的方式,并按某種順序來安排它們,使得操作之間不會互相影響。例如:

$ sed '

/three/ s/three/four/

/two/ s/two/three/' sample_one

one 1

three 1

four 1

one 1

three 1

three 1

four 1

$

這非常有效,因為 "three" 值在 "two" 變成 "three" 之前得到修改。

標簽和注釋

可以在 sed 腳本文件中放置標簽,這樣一旦文件變得龐大,可以更容易地說明正在發(fā)生的事情。存在各種各樣與這些標簽相關(guān)的命令,它們包括:

接下來的步驟

訪問并收藏 Linux 技術(shù)中心

閱讀 Dale Dougherty 和 Arnold Robbins 的著作 sed awk, 2nd Edition (O'Reilly Associates 出版社)。

: 冒號表示一個標簽名稱。例如:

:HERE

以冒號開始的標簽可以由 "b" 和 "t" 命令處理。

b {label} 充當 "goto" 語句的作用,將處理發(fā)送至前面有一個冒號的標簽。例如,

b HERE

將處理發(fā)送給行

:HERE

如果緊跟 b 之后沒有指定任何標簽,則處理轉(zhuǎn)至腳本文件的末尾。

t {label} 只要自上次輸入行或執(zhí)行一次 "t" 命令以來進行了替換操作,就轉(zhuǎn)至該標簽。和 "b" 一樣,如果沒有給定標簽名,則處理轉(zhuǎn)至腳本文件的末尾。

# 符號作為一行的第一個字符將使整行被當作注釋處理。注釋行與標簽不同,不能使用 b 或 t 命令來轉(zhuǎn)到注釋行上。

linux命令:rm `ls | grep -v `a 中,ls 和 a左上角的那個小撇代表什么意思

在bash里面 用兩個` 來表示其中的內(nèi)容是一個bash命令執(zhí)行的結(jié)果返回值

簡單的例子:

date 這個命令在shell中的功能是顯示當前日期

[root@localhost ~]# date

Sun Nov 25 16:35:59 CST 2012

我們將echo 和date一起使用

1.不加`來表示 結(jié)果如下:

[root@localhost ~]# echo date

date

2.加`來表示 結(jié)果如下:

[root@localhost ~]# echo `date`

Sun Nov 25 16:37:48 CST 2012

網(wǎng)頁標題:linux命令撇號,shell反撇號
文章URL:http://muchs.cn/article30/hcpdpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、域名注冊、網(wǎng)站內(nèi)鏈網(wǎng)頁設(shè)計公司、虛擬主機網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)