日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

通用線程--sed 實例,第1部分( 二 )


下面是使用 sed 從輸出流除去 /etc/services 文件第一行的示例:
$ sed -e "1d" /etc/services | more如您所見,除了前面有 "1" 之外,該命令與第一個 "d" 命令十分類似 。如果您猜到 "1" 指的是第一行,那您就猜對了 。與第一個示例中只使用 "d" 不同的是,這一次使用的 "d" 前面有一個可選的數(shù)字地址 。通過使用地址,可以告訴 sed 只對某一或某些特定行進行編輯 。地址范圍
現(xiàn)在,讓我們看一下如何指定地址范圍 。在本例中,sed 將刪除輸出的第 1 到 10 行:
$ sed -e "1,10d" /etc/services | more當用逗號將兩個地址分開時,sed 將把后面的命令應(yīng)用到從第一個地址開始、到第二個地址結(jié)束的范圍 。在本例中,將 "d" 命令應(yīng)用到第 1 到 10 行(包括這兩行) 。所有其它行都被忽略 。帶規(guī)則表達式的地址
現(xiàn)在演示一個更有用的示例 。假設(shè)要查看 /etc/services 文件的內(nèi)容,但是對查看其中包括的注釋部分不感興趣 。如您所知,可以通過以 "#" 字符開頭的行在 /etc/services 文件中放置注釋 。為了避免注釋,我們希望 sed 刪除以 "#" 開始的行 。以下是具體做法:
$ sed -e "/^#/d" /etc/services | more試一下該例,看看發(fā)生了什么 。您將注意到,sed 成功完成了預期任務(wù) ?,F(xiàn)在,讓我們分析發(fā)生的情況 。要理解 "/^#/d" 命令,首先需要對其剖析 。首先,讓我們除去 "d" -- 這是我們前面所使用的同一個刪除行命令 。新增加的是 "/^#/" 部分,它是一種新的規(guī)則表達式地址 。規(guī)則表達式地址總是由斜杠括起 。它們指定一種 模式,緊跟在規(guī)則表達式地址之后的命令將僅適用于正好與該特定模式匹配的行 。因此,"/^#/" 是一個規(guī)則表達式 。但是,它做些什么呢?很明顯,現(xiàn)在該復習規(guī)則表達式了 。規(guī)則表達式復習
可以使用規(guī)則表達式來表示可能會在文本中發(fā)現(xiàn)的模式 。您在 shell 命令行中用過 "*" 字符嗎?這種用法與規(guī)則表達式類似,但并不相同 。下面是可以在規(guī)則表達式中使用的特殊字符:字符 描述
與行首匹配
與行末尾匹配
與任一個字符匹配
將與前一個字符的零或多個出現(xiàn)匹配
[ ] 與 [ ] 之內(nèi)的所有字符匹配感受規(guī)則表達式的最好方法可能是看幾個示例 。所有這些示例都將被 sed 作為合法地址接受,這些地址出現(xiàn)在命令的左邊 。下面是幾個示例:規(guī)則
表達式 描述
/./ 將與包含至少一個字符的任何行匹配
/../ 將與包含至少兩個字符的任何行匹配
/^#/ 將與以 "#" 開始的任何行匹配
/^$/ 將與所有空行匹配
/}^/ 將與以 "}"(無空格)結(jié)束的任何行匹配
/} *^/ 將與以 "}" 后面跟有零或多個空格結(jié)束的任何行匹配
/[abc]/ 將與包含小寫 "a"、"b" 或 "c" 的任何行匹配
/^[abc]/ 將與以 "a"、"b" 或 "c"開始的任何行匹配在這些示例中,鼓勵您嘗試幾個 ?;ㄒ恍r間熟悉規(guī)則表達式,然后嘗試幾個自己創(chuàng)建的規(guī)則表達式 。可以如下使用 regexp:
$ sed -e "/regexp/d" /path/to/my/test/file | more這將導致 sed 刪除任何匹配的行 。然而,通過告訴 sed打印 regexp 匹配并刪除不匹配的內(nèi)容,而不是與之相反的方法,會更有利于熟悉規(guī)則表達式 ??梢杂靡韵旅钸@樣做:
$ sed -n -e "/regexp/p" /path/to/my/test/file | more請注意新的 "-n" 選項,該選項告訴 sed 除非明確要求打印模式空間,否則不這樣做 。您還會注意到,我們用 "p" 命令替換了 "d" 命令,如您所猜想的那樣,這明確要求 sed 打印模式空間 。就這樣,將只打印匹配部分 。有關(guān)地址的更多內(nèi)容
目前為止,我們已經(jīng)看到了行地址、行范圍地址和 regexp 地址 。但是,還有更多的可能 。我們可以指定兩個用逗號分開的規(guī)則表達式,sed 將與所有從匹配第一個規(guī)則表達式的第一行開始,到匹配第二個規(guī)則表達式的行結(jié)束(包括該行)的所有行匹配 。例如,以下命令將打印從包含 "BEGIN" 的行開始,并且以包含 "END" 的行結(jié)束的文本塊:

推薦閱讀