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

通用線程--sed 實(shí)例,第2部分( 二 )


"[ ]" 規(guī)則表達(dá)式語法還有一些附加選項(xiàng) 。要指定字符范圍,只要字符不在第一個(gè)或最后一個(gè)位置,就可以使用 "-",如下所示:"[a-x]*"
這將匹配零或多個(gè)全部為 "a"、"b"、"c"..."v"、"w"、"x" 的字符 。另外,可以使用 "[:space:]" 字符類來匹配空格 。以下是可用字符類的相當(dāng)完整的列表:字符類 描述
[:alnum:] 字母數(shù)字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或制表鍵
[:cntrl:] 任何控制字符
[:digit:] 數(shù)字 [0-9]
[:graph:] 任何可視字符(無空格)
[:lower:] 小寫 [a-z]
[:print:] 非控制字符
[:punct:] 標(biāo)點(diǎn)字符
[:space:] 空格
[:upper:] 大寫 [A-Z]
[:xdigit:] 十六進(jìn)制數(shù)字 [0-9 a-f A-F]盡可能使用字符類是很有利的,因?yàn)樗鼈兛梢愿玫剡m應(yīng)非英語 locale(包括某些必需的重音字符等等).高級替換功能
我們已經(jīng)看到如何執(zhí)行簡單甚至有些復(fù)雜的直接替換,但是 sed 還可以做更多的事 。實(shí)際上可以引用匹配規(guī)則表達(dá)式的部分或全部,并使用這些部分來構(gòu)造替換字符串 。作為示例,假設(shè)您正在回復(fù)一條消息 。下例將在每一行前面加上短語 "ralph said: ":$ sed -e "s/.*/ralph said: &/" origmsg.txt
輸出如下:ralph said: Hiya Jim, ralph said: ralph said:
I sure like this sed stuff! ralph said:
該例的替換字符串中使用了 "&" 字符,該字符告訴 sed 插入整個(gè)匹配的規(guī)則表達(dá)式 。因此,可以將與 ".*" 匹配的任何內(nèi)容(行中的零或多個(gè)字符的最大組或整行)插入到替換字符串中的任何位置,甚至多次插入 。這非常好,但 sed 甚至更強(qiáng)大 。那些極好的帶反斜杠的圓括號
"s///" 命令甚至比 "&" 更好,它允許我們在規(guī)則表達(dá)式中定義區(qū)域,然后可以在替換字符串中引用這些特定區(qū)域 。作為示例,假設(shè)有一個(gè)包含以下文本的文件:foo bar oni eeny meeny miny larry curly moe jimmy the weasel
現(xiàn)在假設(shè)要編寫一個(gè) sed 腳本,該腳本將把 "eeny meeny miny" 替換成 "Victor eeny-meeny Von miny" 等等 。要這樣做,首先要編寫一個(gè)由空格分隔并與三個(gè)字符串匹配的規(guī)則表達(dá)式 。".* .* .*"
現(xiàn)在,將在其中每個(gè)感興趣的區(qū)域兩邊插入帶反斜杠的圓括號來定義區(qū)域:"(.*) (.*) (.*)"
除了要定義三個(gè)可在替換字符串中引用的邏輯區(qū)域以外,該規(guī)則表達(dá)式的工作原理將與第一個(gè)規(guī)則表達(dá)式相同 。下面是最終腳本:$ sed -e "s/(.*) (.*) (.*)/Victor 1-2 Von 3/" myfile.txt
如您所見,通過輸入 "x"(其中,x 是從 1 開始的區(qū)域號)來引用每個(gè)由圓括號定界的區(qū)域 。輸入如下:Victor foo-bar Von oni Victor eeny-meeny Von miny Victor larry-curly Von moe Victor jimmy-the Von weasel
隨著對 sed 越來越熟悉,您可以花最小力氣來進(jìn)行相當(dāng)強(qiáng)大的文本處理 。您可能想如何使用熟悉的腳本語言來處理這種問題 -- 能用一行代碼輕易實(shí)現(xiàn)這樣的解決方案嗎?組合使用
在開始創(chuàng)建更復(fù)雜的 sed 腳本時(shí),需要有輸入多個(gè)命令的能力 。有幾種方法這樣做 。首先,可以在命令之間使用分號 。例如,以下命令系列使用 "=" 命令和 "p" 命令,"=" 命令告訴 sed 打印行號,"p" 命令明確告訴 sed 打印該行(因?yàn)樘幱?"-n" 模式) 。$ sed -n -e "=;p" myfile.txt
無論什么時(shí)候指定了兩個(gè)或更多命令,都按順序?qū)⒚總€(gè)命令應(yīng)用到文件的每一行 。在上例中,首先將 "=" 命令應(yīng)用到第 1 行,然后應(yīng)用 "p" 命令 。接著,sed 繼續(xù)處理第 2 行,并重復(fù)該過程 。雖然分號很方便,但是在某些場合下,它不能正常工作 。另一種替換方法是使用兩個(gè) -e 選項(xiàng)來指定兩個(gè)不同的命令:$ sed -n -e "=" -e "p" myfile.txt
然而,在使用更為復(fù)雜的附加和插入命令時(shí),甚至多個(gè) "-e" 選項(xiàng)也不能幫我們的忙 。對于復(fù)雜的多行腳本,最好的方法是將命令放入一個(gè)單獨(dú)的文件中 。然后,用 -f 選項(xiàng)引用該腳本文件:$ sed -n -f mycommands.sed myfile.txt

推薦閱讀