tr是Linux和Unix系統(tǒng)中的命令行程序,可轉(zhuǎn)換,刪除和壓縮標(biāo)準(zhǔn)輸入的字符,并將結(jié)果寫入標(biāo)準(zhǔn)輸出。
tr
命令通常通過管道與其他命令組合使用,并且可以執(zhí)行刪除重復(fù)字符,將大寫轉(zhuǎn)換為小寫以及基本字符替換和刪除的操作。
在本教程中,我們將通過實際示例和最常見選項的詳細(xì)說明向您展示如何使用tr
命令。
tr 命令選項
tr
命令的語法形式是tr OPTION... SET1 [SET2]
。OPTION
選項是必須的參數(shù),SET
是字符集合,可以是一個多個字符集合。
tr
命令默認(rèn)接受具有相同長度的兩組字符,并用第二組中字符集合替換第一組存在的字符集合。
例如命令echo 'myfreax' | tr 'myf' 'red'
將m
替換為r
,y
替換為e
,將f
替換為d
。
echo 'myfreax' | tr 'myf' 'red'
redreax
也可以使用字符范圍來定義字符集,減少繁瑣的輸入,例如你要輸入lmno,可以使用l-n
代替。
也就是說命令echo 'myfreax' | tr 'lmno' 'wxyz'
和echo 'myfreax' | tr 'l-n' 'w-z'
是等價的。
echo 'myfreax' | tr 'lmno' 'wxyz'
echo 'myfreax' | tr 'l-n' 'w-z'
當(dāng)使用tr
命令的-c
/--complement
選項時,tr
命令將會替換第一組不存在的所有字符。
例如命令echo 'myfreax' | tr -c 'fa' 'xy'
使用y
替換字符串myfreax不是f或者a的字符。
您可能已經(jīng)注意到輸出比輸入多一個可見的字符。這是因為echo
命令會打印一個不可見的換行符\\n
。
tr命令也將\\n
字符也替換為y
。為了使echo
命令不打印換行符,請使用echo命令的-n
選項。
echo 'myfreax' | tr -c 'fa' 'xy'
echo -n 'myfreax' | tr -c 'fa' 'xy'
yyfyyayy
tr
命令的-d
/--delete
選項刪除指定字符集合。例如命令echo 'myfreax' | tr -d 'ea'
刪除字符串myfreax
的ea
字符串。
在不壓縮字符的情況下刪除字符時,您只能指定一組。
echo 'myfreax' | tr -d 'ea'
myfrx
-s
/--squeeze-repeats
選項使用最后一個字符集合替換重復(fù)出現(xiàn)的字符。命令echo "GNU \\ Linux" | tr -s ' '
刪除重復(fù)出現(xiàn)的空格字符。
在指定第二個字符集合時,首先使用第一個字符集合替換字符串GNU \\ Linux
,然后使用第二個字符集合替換第一個字符集合。
echo "GNU \\ Linux" | tr -s ' ' #GNU \\ Linux
echo "GNU \\ Linux" | tr -s ' ' '_' #GNU_\\_Linux
tr 命令轉(zhuǎn)換小寫大寫
將小寫轉(zhuǎn)換為大寫或者大寫轉(zhuǎn)小寫。是tr
命令的典型用例之一。在指定字符集合時可以使用[:lower:]
匹配小寫字符,[:upper:]
匹配大寫字符。
除了字符類,您還可以使用范圍,例如'a-z'匹配小寫字符串,'A-Z'匹配大寫字符。要將大寫轉(zhuǎn)換為小寫,只需切換字符集合的位置即可。
命令echo 'myfreax' | tr 'a-z' 'A-Z'
轉(zhuǎn)換為大寫,echo 'myfreax' | tr 'A-Z' 'a-z'
轉(zhuǎn)換為小寫。
echo 'myfreax' | tr '[:lower:]' '[:upper:]' #MYFREAX
echo 'myfreax' | tr 'a-z' 'A-Z' #MYFREAX
tr 命令刪除數(shù)字
[:digit:]
代表所有數(shù)字字符,要刪除數(shù)字,可以組合使用tr
命令的-cd
選項刪除所有非數(shù)字字符。
tr
命令的-c
選項表示替換第一組不存在的所有字符。-s
選項表示刪除字符一組字符集合存在的字符。
tr -cd [:digit:]
組合起來就是刪除第一組字符集合不是數(shù)字的字符,如果你要刪除不是數(shù)字的字符,使用[:alpha:]
替換[:digit:]
。
echo "my phone is 123-456-7890" | tr -cd [:digit:]
1234567890
tr 命令在單詞末尾插入換行符
[:alnum:]
代表所有數(shù)字和字符A-Z
與a-z
,要在單詞末尾插入換行符,可以組合使用tr
命令的-cs
選項刪除所有非數(shù)字字符。
tr
命令的-c
選項表示替換第一組不存在的所有字符。-s
選項表示使用最后一個字符集合替換重復(fù)出現(xiàn)的字符。-c '[:alnum:]'
表示搜索所有空白字符。
tr -cs '[:alnum:]' '\\n'
組合起來就是搜索所有空白字符串替換為換行符\\n
。
echo 'GNU is an operating system' | tr -cs '[:alnum:]' '\\n'
GNU
is
an
operating
system
tr 命令刪除空行
由于tr命令僅接受標(biāo)準(zhǔn)輸入,因此必須使用標(biāo)準(zhǔn)輸入重定向符號<
,將標(biāo)準(zhǔn)輸入的鍵盤替換為文件。
tr
命令的-s
選項表示使用最后一個字符集合替換重復(fù)出現(xiàn)的字符。換行符號在單行中會被以為是重復(fù)字符串。
tr -s '\\n'
組合就是替換重復(fù)的換行符,由于命令沒有指定第二個字符集合,因此沒有字符替換。
最后> new_file.txt
就是將tr命令的標(biāo)準(zhǔn)輸出重定向到文件new_file.txt
。
tr -s '\\n' < file.txt > new_file.txt
tr 命令打印$PATH目錄
$PATH
環(huán)境變量是用冒號分隔的目錄列表,指示Shell程序在用戶運行命令時要搜索可執(zhí)行文件的目錄。
如要在每一行打印每個$PATH環(huán)境變量的目錄,只需要將冒號:
替換為換行符號即可。
echo $PATH | tr ':' '\\n'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
結(jié)論
現(xiàn)在,您應(yīng)該對如何使用Linux tr命令有很好的了解。tr
只能使用單個字符。對于復(fù)雜的模式匹配和字符串處理應(yīng)該使用sed
或awk。
-
UNIX
+關(guān)注
關(guān)注
0文章
296瀏覽量
41491 -
命令
+關(guān)注
關(guān)注
5文章
684瀏覽量
22027 -
lunix
+關(guān)注
關(guān)注
0文章
3瀏覽量
1038
發(fā)布評論請先 登錄
相關(guān)推薦
評論