Linux命令之tr

tr '[0*4]' '*' < data.txt

若data.txt中的任意行中出現了連續4個0,就是4個****替換。必須是[0*4]形式,不能是0*4,否則數字4會被替換成*,原因是[0*4]是tr的語法[CHAR*REPEAT],兒後面是*也可以是****,這裏只使用了一個*,是因爲tr的一個特性:當SET1(上面的[0*4])的長度大於SET2(上面的*)時,SET2會重複SET1的最後一個字符。例如,SET1是0000,由於SET2是一個*,先將SET1變成*000,再由於SET2的長度小於SET1,重複SET1的最後一個*,變成****

tr -cs '[:lower:][:upper:]' '\n' < data.txt
將將data.txt中的每一行數據中不符合所有大小寫字符的數據用\n替換(當SET2的長度小於SET1時,重複SET1的最後一個字符),然後再壓縮\n爲一個\n。例如,輸入是abcd1234efgh,針對這個數據,其滿足SET1條件後的補集是1234,即替換成4個\n(換行),經過壓縮後,變成一個\n。輸出便是

abcd
efgh
tr -s '[:punct:][:blank:]' '\n' < data.txt
這個例子和上面的意思基本一樣,不過不是替換SET1的補集,而是替換滿足SET1條件的數據。

tr -ds '[:digit:]' '\n' < data.txt
刪除data.txt中每一行的數字,再針對每一行的數據進行其中的\n壓縮

tr -d -- -axM < data.txt
若要刪除data.txt中的每一行中的字符 - , a , x , M,可用這種形式,中間的兩個--表示到此停止tr的OPTION的處理,後面的數據都是SET1的數據


選項總結:

選項 SET1 SET2 意義
用SET2的數據替換每一行符合SET1模式的數據
-d 刪除每一行中符合SET1模式的數據
-s 用SET1的數據壓縮每一行的符合模式的數據
-s 用SET2的數據先替換符合SET1模式的數據,然後壓縮每一行的符合SET2模式的數據
-ds 刪除每一行中符合SET1模式的數據,然後壓縮符合SET2模式的數據
-cs 用SET2的數據替換不符合SET1模式的數據,然後壓縮每一行的符合SET2模式的數據











替換過程的長度總結:

若SET1的長度等於SET2的長度,則每一個字符對應替換。例如,設SET1是0000,SET2是*wkz,則替換後,符合SET1的數據變爲*wkz

若SET1的長度大於SET2的長度,則SET2將重複SET1最後一個匹配的字符。例如SET1是a-z,表示26個字符,SET2是A-B,則A替換a,B替換b,然後這最後一個替換的B將不停重複,知道長度和SET1的相等

若SET1的長度小於SET2的長度,這種情況不允許,結果未定義


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章