tr是Linux和Unix系統(tǒng)中的命令行程序,可轉換,刪除和壓縮標準輸入的字符,并將結果寫入標準輸出。
tr
命令通常通過管道與其他命令組合使用,并且可以執(zhí)行刪除重復字符,將大寫轉換為小寫以及基本字符替換和刪除的操作。
在本教程中,我們將通過實際示例和最常見選項的詳細說明向您展示如何使用tr
命令。
tr 命令選項
tr
命令的語法形式是tr OPTION... SET1 [SET2]
。OPTION
選項是必須的參數,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的字符。
您可能已經注意到輸出比輸入多一個可見的字符。這是因為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
選項使用最后一個字符集合替換重復出現的字符。命令echo "GNU \\ Linux" | tr -s ' '
刪除重復出現的空格字符。
在指定第二個字符集合時,首先使用第一個字符集合替換字符串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 命令刪除數字
[:digit:]
代表所有數字字符,要刪除數字,可以組合使用tr
命令的-cd
選項刪除所有非數字字符。
tr
命令的-c
選項表示替換第一組不存在的所有字符。-s
選項表示刪除字符一組字符集合存在的字符。
tr -cd [:digit:]
組合起來就是刪除第一組字符集合不是數字的字符,如果你要刪除不是數字的字符,使用[:alpha:]
替換[:digit:]
。
echo "my phone is 123-456-7890" | tr -cd [:digit:]
1234567890
tr 命令在單詞末尾插入換行符
[:alnum:]
代表所有數字和字符A-Z
與a-z
,要在單詞末尾插入換行符,可以組合使用tr
命令的-cs
選項刪除所有非數字字符。
tr
命令的-c
選項表示替換第一組不存在的所有字符。-s
選項表示使用最后一個字符集合替換重復出現的字符。-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
選項表示使用最后一個字符集合替換重復出現的字符。換行符號在單行中會被以為是重復字符串。
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
結論
現在,您應該對如何使用Linux tr命令有很好的了解。tr
只能使用單個字符。對于復雜的模式匹配和字符串處理應該使用sed
或awk。
-
UNIX
+關注
關注
0文章
296瀏覽量
41478 -
命令
+關注
關注
5文章
683瀏覽量
22011 -
lunix
+關注
關注
0文章
3瀏覽量
1035
發(fā)布評論請先 登錄
相關推薦
評論