build-output 2>&1 命令 有兩個(gè)常用來生成文本輸出的標(biāo)準(zhǔn) Unix 命令:cat 和 echo 。 cat 命令讀取參數(shù)中指定的每個(gè)。使用 UNIX 進(jìn)行文本處理( 二 )。" />

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

使用 UNIX 進(jìn)行文本處理( 二 )


清單 1. 將標(biāo)準(zhǔn)錯(cuò)誤流連接到標(biāo)準(zhǔn)輸出流
make > build-output 2>&1
命令
有兩個(gè)常用來生成文本輸出的標(biāo)準(zhǔn) Unix 命令:cat 和 echo 。
cat 命令讀取參數(shù)中指定的每個(gè)文件,并將這些文件的內(nèi)容寫入到 stdout 。echo 命令將其參數(shù)寫入到 stdout 。您常常會(huì)發(fā)現(xiàn)它們作為更復(fù)雜的命令管道中的一部分(請(qǐng)參見清單 2) 。
清單 2. 使用 cat 和 echo
cat file1 file2 ... filen
echo arguments...
但如果您只需要文件中開頭的部分或結(jié)尾的部分,那又應(yīng)該如何呢?cat 有兩種可用來完成這種任務(wù)的變種,稱為 head 和 tail(請(qǐng)參見清單 3),它們分別可以顯示開頭的或結(jié)尾的 10 行內(nèi)容,您可以使用 -n 選項(xiàng)為它們指定不同的行數(shù) 。
清單 3. 使用 head 和 tail
head file1 file2 ... filen
tail file1 file2 ... filen
tail 命令還有一個(gè)有用的選項(xiàng) -f (follow) 。該選項(xiàng)告訴 tail 打印指定文件的最后 10 行,但是它不僅打印已有的內(nèi)容,還會(huì)等待該文件中將要出現(xiàn)的更多內(nèi)容,并對(duì)其進(jìn)行打印 。您可以使用該選項(xiàng)接著 顯示錯(cuò)誤日志中的輸出,例如,要在將錯(cuò)誤寫入到日志的同時(shí)查看這些錯(cuò)誤 。
轉(zhuǎn)換文本
既然您已經(jīng)了解了至少 5 種生成文本的方式,下面讓我們來看一些進(jìn)行簡單文本轉(zhuǎn)換的示例 。
tr 命令允許您將一個(gè)集合中的字符轉(zhuǎn)換為另一個(gè)集合中相應(yīng)的字符 。讓我們來看一些示例(清單 4),以了解其工作方式 。
清單 4. 使用 tr 對(duì)字符進(jìn)行轉(zhuǎn)換
echo "a test" | tr t p
echo "a test" | tr aest 1234
echo "a test" | tr -d t
echo "a test" | tr '[:lower:]' '[:upper:]'
研究這些命令的輸出結(jié)果(請(qǐng)參見清單 5),可以看出 tr 的工作方式(提示:它直接使用第二個(gè)集合中相應(yīng)的字符來代替第一個(gè)集合中的字符) 。
清單 5. tr 進(jìn)行了哪些工作?
chrish@dhcp3 [199]$ echo "a test" | tr t p
a pesp
chrish@dhcp3 [200]$ echo "a test" | tr aest 1234
1 4234
chrish@dhcp3 [201]$ echo "a test" | tr -d t
a es
chrish@dhcp3 [202]$ echo "a test" | tr '[:lower:]' '[:upper:]'
A TEST
第一個(gè)和第二個(gè)示例都很簡單,將一個(gè)字符替換為另一個(gè)字符 。第三個(gè)示例使用了 -d 選項(xiàng) (delete),它從輸出中徹底刪除了指定的字符 。這個(gè)選項(xiàng)通常用來從 Dos 文本文件中刪除回車,以將其轉(zhuǎn)換為 Unix 文本文件(請(qǐng)參見清單 6) 。最后一個(gè)示例使用了字符類([: :] 中的名稱),以將所有的小寫字母轉(zhuǎn)換為大寫字母 ??梢浦膊僮飨到y(tǒng)接口標(biāo)準(zhǔn)(POSIX 標(biāo)準(zhǔn))字符類包括:
alnum:字母數(shù)字字符 alpha:字母字符 cntrl:控制(非打印)字符 digit:數(shù)字字符 graph:圖形字符 lower:小寫字母字符 print:可打印字符 punct:標(biāo)點(diǎn)符號(hào) space:空白字符 upper:大寫字符 xdigit:十六進(jìn)制字符 清單 6. 將 DOS 文本文件轉(zhuǎn)換為 UNIX 文本文件
tr -d '
' < input_dos_file.txt > output_unix_file.txt
盡管 tr 命令表示了 C locale 環(huán)境變量(有關(guān)這些環(huán)境變量更多的信息,可以使用 man locale),但是不要指望它能夠?qū)?UTF-8 文檔進(jìn)行任何合理的操作,如能夠使用合適的大寫字符替換小寫重音字符 。tr 命令最適合于 ASCII 和其他標(biāo)準(zhǔn) C 區(qū)域設(shè)置 。
使用 sed 進(jìn)行復(fù)雜的搜索和替換
tr 命令所提供的單字符替換(或刪除)功能非常適用于特定的解決方案,但是這些功能并不是很靈活 。如果您需要將一個(gè)單詞替換為另一個(gè)單詞,或?qū)⑦B續(xù)的空格和制表符替換為一個(gè)空格,那又應(yīng)該怎么辦呢?
幸運(yùn)的是,您可以使用 sed 命令 (Stream EDitor),它提供了功能強(qiáng)大的正則表達(dá)式 匹配和替換 。正則表達(dá)式是使用各種構(gòu)件構(gòu)建的復(fù)雜模式規(guī)范,并且隨著模式變得越來越復(fù)雜,它看起來就像是調(diào)制解調(diào)器的線路噪聲 。本文并不打算詳細(xì)地介紹正則表達(dá)式,但是在本文中,您將簡單了解 sed 所使用的一些有用的模式 。

推薦閱讀