tr的使用方法
2024-07-21 02:34:52
供稿:網(wǎng)友
tr用來從標(biāo)準(zhǔn)輸入中通過替換或刪除操作進(jìn)行字符轉(zhuǎn)換。t r主要用于刪除文件中控制字符或進(jìn)行字符轉(zhuǎn)換。使用t r時(shí)要轉(zhuǎn)換兩個(gè)字符串:字符串1用于查詢,字符串2用于處理各種轉(zhuǎn)換。
t r剛執(zhí)行時(shí),字符串1中的字符被映射到字符串2中的字符,然后轉(zhuǎn)換操作開始。
本章內(nèi)容有:
* 大小寫轉(zhuǎn)換。
* 去除控制字符。
* 刪除空行。
帶有最常用選項(xiàng)的t r命令格式為:
t r - c - d - s [ " s t r i n g 1 _ t o _ t r a n s l a t e _ f r o m " ] [ " s t r i n g 2 _ t o _ t r a n s l a t e _ t o " ] i n p u t _
f i l e
這里:
-c 用字符串1中字符集的補(bǔ)集替換此字符集,要求字符集為A S C I I。
-d 刪除字符串1中所有輸入字符。
-s 刪除所有重復(fù)出現(xiàn)字符序列,只保留第一個(gè);即將重復(fù)出現(xiàn)字符串壓縮為一個(gè)字符
串。
I n p u t - f i l e是轉(zhuǎn)換文件名。雖然可以使用其他格式輸入,但這種格式最常用。
12.1.1 字符范圍
使用t r時(shí),可以指定字符串列表或范圍作為形成字符串的模式。這看起來很像正則表達(dá)式,但實(shí)際上不是。指定字符串1或字符串2的內(nèi)容時(shí),只能使用單字符或字符串范圍或列表。
[a-z] a-z內(nèi)的字符組成的字符串。
[A-Z] A-Z內(nèi)的字符組成的字符串。
[0-9] 數(shù)字串。
/octal 一個(gè)三位的八進(jìn)制數(shù),對應(yīng)有效的A S C I I字符。
[O*n] 表示字符O重復(fù)出現(xiàn)指定次數(shù)n。因此[ O * 2 ]匹配O O的字符串。
大部分t r變種支持字符類和速記控制字符。字符類格式為[:c l a s s ],包含數(shù)字、希臘字母、
空行、小寫、大寫、c n t r l鍵、空格、點(diǎn)記符、圖形等等。表1 2 - 1包括最常用的控制字符的速記方式及三位八進(jìn)制引用方式。
當(dāng)用一個(gè)單字符替換一個(gè)字符串或字符范圍時(shí),注重字符并不放在方括號里( [ ])。一些系統(tǒng)也可以使用方括號,例如可以寫成["/ 0 1 2"]或"/ 0 1 2",t r也答應(yīng)不加引號,因此命令中看到單引號而不是雙引號時(shí)也不要感到希奇。
像大多數(shù)系統(tǒng)工具一樣, t r也受特定字符的影響。因此假如要匹配這些字符,需使用反斜線屏蔽其非凡含義。例如,用/ {指定花括號左邊可以屏蔽其非凡含義。
表12-1 tr中特定控制字符的不同表達(dá)方式
速記符含義八進(jìn)制方式
/ a Ctrl-G 鈴聲/ 0 0 7
/ b Ctrl-H 退格符/ 0 1 0
/f Ctrl-L 走行換頁/ 0 1 4
/n Ctrl-J 新行/ 0 1 2
/ r Ctrl-M 回車/ 0 1 5
/t Ctrl-I tab鍵/ 0 11
/ v Ctrl-X / 0 3 0
12.1.2 保存輸出
要保存輸出結(jié)果,需將之重定向到一個(gè)文件。下面的例子重定向輸出到文件r e s u l t s . t x t。
輸入文件是c o p s . t x t。
現(xiàn)在看一些例子。
12.1.3 去除重復(fù)出現(xiàn)的字符
下面文件包含了一些打印錯(cuò)誤。這種情況時(shí)常發(fā)生,例如在v i編輯器中,偶然按住一個(gè)鍵不放。
假如要去除重復(fù)字母或?qū)⑵鋲嚎s在一起,使用- s選項(xiàng)。因?yàn)槎际亲帜?,故使用[ a - z ]。輸入文件重定向到t r命令。
所有重復(fù)字符被壓縮成一個(gè)。假如使用c a t命令,再將結(jié)果管道輸出至t r,結(jié)果是一樣的。
12.1.4 刪除空行
要刪除空行,可將之剔出文件。下面是一個(gè)文件p l a n e . t x t。文本間有許多空行。
使用- s來做這項(xiàng)工作。換行的八進(jìn)制表示為/ 0 1 2,命令為:
也可以使用換行速記方式/ n,這里用單引號(通常用雙引號)。
12.1.5 大寫到小寫
除了刪除控制字符,轉(zhuǎn)換大小寫是t r最常用的功能。為此需指定即將轉(zhuǎn)換的小寫字符[ a - z ]
和轉(zhuǎn)換結(jié)果[ A - Z ]。
第一個(gè)例子,t r從一個(gè)包含大小寫字母的字符串中接受輸入。
同樣,也可以使用字符類[:l o w e r:]和[:u p p e r:]。
將文本文件大寫轉(zhuǎn)換為小寫并輸出至一個(gè)新文件,格式為:
這里f i l e - t o - t r a n s l a t e保存即將轉(zhuǎn)換的文件, n e w - f i l e - n a m e為保存結(jié)果的新文件名。例如:
12.1.6 小寫到大寫
轉(zhuǎn)換小寫到大寫與上一節(jié)大寫到小寫過程剛好相反。以下有兩個(gè)例子:
將文本文件從小寫轉(zhuǎn)換為大寫并將結(jié)果存入一個(gè)新文件,格式為:
f i l e - t o - t r a n s l a t e保存即將轉(zhuǎn)換的文件, n e w - f i l e - n a m e保存結(jié)果文件,例如:
12.1.7 刪除指定字符
偶然會從下載文件中刪除只包含字母或數(shù)字的列。需要結(jié)合使用- c和- s選項(xiàng)完成此功能。
下面的文件包含一個(gè)星期的日程表。任務(wù)是從其中刪除所有數(shù)字,只保留日期。日期有大寫,也有小寫格式。因此需指定兩個(gè)字符范圍[ a - z ]和[ A - Z ],命令tr -cs "[a-z][A-Z]""[/012*]"將文件每行所有不包含在[ a - z ]或[ A - Z ](所有希臘字母)的字符串放在字符串1中并轉(zhuǎn)換為一新行。
- s選項(xiàng)表明壓縮所有新行, - c表明保留所有字母不動。原文件如下,后跟t r命令:
12.1.8 轉(zhuǎn)換控制字符t r的第一個(gè)功能就是轉(zhuǎn)換控制字符,非凡是從d o s向U N I X下載文件時(shí),忘記設(shè)置f t p關(guān)于回車換行轉(zhuǎn)換的選項(xiàng)時(shí)更是如此。
下面是故意沒有設(shè)置轉(zhuǎn)換開關(guān)的一個(gè)文本文件,是關(guān)于文具需求的一部分內(nèi)容。使用c a t
- v顯示控制字符。
猜想'^ ^ ^ ^ ^ ^'是t a b鍵。每一行以C t r l - M結(jié)尾,文件結(jié)尾C t r l - Z,以下是改動方法。
使用- s選項(xiàng),查看A S C I I表。^的八進(jìn)制代碼是1 3 6,^ M是0 1 5,t a b鍵是0 11,^ Z是0 3 2 ,下面將按步驟完成最終功能。
用t a b鍵替換^ ^ ^ ^ ^ ^,命令為" / 1 3 6 " " [ / 0 11 * ] "。將結(jié)果重定向到臨時(shí)工作文件s t a t . t m p。
用新行替換每行末尾的^ M,并用/ n去除^ Z,輸入要來自于臨時(shí)工作文件s t a t . t m p。
最后去除所有的控制字符,文件就可以使用了。
12.1.9 快速轉(zhuǎn)換
假如需要刪除文件中^ M,并代之以換行。使用命令:
或者用下述命令得同樣結(jié)果。
也可以用下述命令:
另一個(gè)一般的D o s到U N I X轉(zhuǎn)換是命令:
將刪除所有^ M和^ Z,代之以換行。
要刪除所有的t a b鍵,代之以空格,使用命令:
替換p a s s w d文件中所有冒號,代之以t a b鍵,可以增加可讀性。將冒號引起來,指定替換字符串中t a b鍵八進(jìn)制值0 11,下面是p a s s w d文件,后跟t r命令結(jié)果:
或者用下述命令得同樣結(jié)果。這里使用t a b鍵的速記符。
12.1.10 匹配多于一個(gè)字符
可以使用[ c h a r a c t e r * n ]格式匹配多于一個(gè)字符。下述文件列出系統(tǒng)硬盤信息,其中包含了
系統(tǒng)已經(jīng)注冊的和未識別的。第一列是數(shù)字,假如不全是0,表明第二列相應(yīng)硬盤已經(jīng)注冊。
有時(shí)全部為0看起來很煩人,找個(gè)吸引人注重力的符號來代替它,以便一眼就能看出哪個(gè)硬盤已注冊,哪個(gè)不可識別。原文件如下:
從文件列表中知道,有一個(gè)硬盤未注冊,因此用星號代替所有的0。模式為[ 0 * 4 ],意即匹配至少4個(gè)0,替換字符串為星號,過濾命令及結(jié)果如下:
現(xiàn)在從文件中可以直接看出哪個(gè)未注冊。
12.2 小結(jié)
t r主要用于字符轉(zhuǎn)換或者抽取控制字符。本章所有功能都可以用s e d來完成,但有些人寧愿使用t r,因?yàn)閠 r更加快捷、輕易。