tr是Linux和Unix系統(tǒng)中的命令行程序,可轉換,刪除和壓縮標準輸入的字符,并將結果寫入標準輸出。
tr命令通常通過管道與其他命令組合使用,并且可以執(zhí)行刪除重復字符,將大寫轉換為小寫以及基本字符替換和刪除的操作。
在本教程中,我們將通過實際示例和最常見選項的詳細說明向您展示如何使用tr命令。
tr 命令選項
tr命令的語法形式是tr OPTION... SET1 [SET2]。OPTION選項是必須的參數(shù),SET是字符集合,可以是一個多個字符集合。
tr命令默認接受具有相同長度的兩組字符,并用第二組中字符集合替換第一組存在的字符集合。
例如命令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'
當使用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選項使用最后一個字符集合替換重復出現(xiàn)的字符。命令echo "GNU \\ Linux" | tr -s ' '刪除重復出現(xiàn)的空格字符。
在指定第二個字符集合時,首先使用第一個字符集合替換字符串GNU \\ Linux,然后使用第二個字符集合替換第一個字符集合。
echo "GNU \\ Linux" | tr -s ' ' #GNU \\ Linux
echo "GNU \\ Linux" | tr -s ' ' '_' #GNU_\\_Linux
tr 命令轉換小寫大寫
將小寫轉換為大寫或者大寫轉小寫。是tr命令的典型用例之一。在指定字符集合時可以使用[:lower:]匹配小寫字符,[:upper:]匹配大寫字符。
除了字符類,您還可以使用范圍,例如'a-z'匹配小寫字符串,'A-Z'匹配大寫字符。要將大寫轉換為小寫,只需切換字符集合的位置即可。
命令echo 'myfreax' | tr 'a-z' 'A-Z'轉換為大寫,echo 'myfreax' | tr 'A-Z' 'a-z'轉換為小寫。
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選項表示使用最后一個字符集合替換重復出現(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命令僅接受標準輸入,因此必須使用標準輸入重定向符號<,將標準輸入的鍵盤替換為文件。
tr命令的-s選項表示使用最后一個字符集合替換重復出現(xiàn)的字符。換行符號在單行中會被以為是重復字符串。
tr -s '\\n'組合就是替換重復的換行符,由于命令沒有指定第二個字符集合,因此沒有字符替換。
最后> new_file.txt就是將tr命令的標準輸出重定向到文件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
結論
現(xiàn)在,您應該對如何使用Linux tr命令有很好的了解。tr只能使用單個字符。對于復雜的模式匹配和字符串處理應該使用sed或awk。
-
UNIX
+關注
關注
0文章
296瀏覽量
42862 -
命令
+關注
關注
5文章
746瀏覽量
23438 -
lunix
+關注
關注
0文章
3瀏覽量
1185
發(fā)布評論請先 登錄

如何使用Linux tr命令
評論