linux 命令值xargs與tr
管道符 | 允許將一個命令的輸出作為另一個命令的輸入。然而,管道符在處理某些類型的輸入時存在局限性,特別是當(dāng)需要將一系列輸入項作為單個命令的多個參數(shù)時()。
xargs 的出現(xiàn)正是為了解決這個問題。xargs 能夠從標準輸入(stdin)讀取數(shù)據(jù),并將這些數(shù)據(jù)轉(zhuǎn)換為特定命令的參數(shù)列表。這使得 xargs 在處理大量輸入項時非常有用,特別是當(dāng)這些輸入項需要作為單個命令的多個參數(shù)時。
以下是一些 xargs 相對于管道符 | 的優(yōu)勢:
-
參數(shù)構(gòu)建:
xargs可以將多個輸入項組合成一個參數(shù)列表,然后一次性傳遞給命令。這對于需要處理大量文件或數(shù)據(jù)的場景特別有用。 -
處理復(fù)雜輸入:
xargs提供了多種選項來處理復(fù)雜的輸入,比如指定分隔符(-d)、限制每次命令運行的參數(shù)個數(shù)(-n)以及使用自定義的占位符(-I)。 -
安全性:在處理包含空格、換行符等特殊字符的文件名時,
xargs的-0選項可以與find命令的-print0選項結(jié)合使用,以確保正確處理這些特殊字符。 -
靈活性:
xargs可以與其他命令和工具結(jié)合使用,以構(gòu)建復(fù)雜的命令行管道。例如,你可以將find命令的輸出通過管道傳遞給xargs,然后使用xargs來執(zhí)行rm命令刪除找到的文件。
tr命令
tr 主要用于替換或刪除文件中的字符。tr 命令通過從標準輸入讀取數(shù)據(jù),然后對其進行處理,并將結(jié)果輸出到標準輸出(通常是屏幕,但也可以重定向到文件)。
常用選項
-c或--complement:取字符集的補集,即處理不在指定字符集中的字符。-d或--delete:刪除指定字符集中的字符。-s或--squeeze-repeats:將連續(xù)的重復(fù)字符壓縮為一個。-t或--truncate-set1:將SET1截斷為與SET2相同的長度。
tr [OPTION]... SET1 [SET2]SET1:指定要轉(zhuǎn)換或刪除的字符集合。
SET2:指定用于替換 SET1 中字符的字符集合(如果提供)。如果 SET2 的長度小于 SET1,則 SET2 會被重復(fù)以匹配 SET1 的長度。如果 SET2 未提供,則 SET1 中的字符會被刪除。
示例
- 將小寫字母轉(zhuǎn)換為大寫字母:
echo "hello world" | tr 'a-z' 'A-Z'
- 刪除文件中的數(shù)字:
echo "abc123def456" | tr -d '0-9'
- 將連續(xù)的空格壓縮為一個空格:
echo "This is a test." | tr -s ' '
- 使用補集刪除所有非字母字符:
echo "Hello, World! 123" | tr -cd 'a-zA-Z'
輸出:
HelloWorld
綜合示例
echo "file1,txt:file2,txt:file3,txt" | tr ':,' '\n' | xargs -n 2 ls -l
輸出結(jié)果
ls: cannot access 'file1.txt': No such file or directory ls: cannot access 'file2.txt': No such file or directory ls: cannot access 'file3.txt': No such file or directory
拆解
echo "file1,txt:file2,txt:file3,txt" | tr ':,' '\n'file1.txt
file2.txt
file3.txt
-
| tr ':,' '\n'管道符號
|將echo命令的輸出作為tr命令的輸入。tr命令是一個字符轉(zhuǎn)換工具,這里它被用來將輸入字符串中的:和,替換為換行符\n。注意,雖然這里指定了兩個要替換的字符(:和,),但只給出了一個替換字符(\n),這意味著:和,都會被替換為\n。因此,每個文件名(及其后面的,txt部分)都會被放在新的一行上。
示例2
echo "file1.txt:file2.txt,file3.txt;file4.txt" | tr ':,;' '\n' |xargs ls -l ls: cannot access 'file1.txt': No such file or directory ls: cannot access 'file2.txt': No such file or directory ls: cannot access 'file3.txt': No such file or directory ls: cannot access 'file4.txt': No such file or directory

浙公網(wǎng)安備 33010602011771號