linux 命令值xargs與tr

Yuezc發表於2024-11-13

管道符 | 允許將一個命令的輸出作為另一個命令的輸入。然而,管道符在處理某些型別的輸入時存在侷限性,特別是當需要將一系列輸入項作為單個命令的多個引數時()。

xargs 的出現正是為了解決這個問題。xargs 能夠從標準輸入(stdin)讀取資料,並將這些資料轉換為特定命令的引數列表。這使得 xargs 在處理大量輸入項時非常有用,特別是當這些輸入項需要作為單個命令的多個引數時。

以下是一些 xargs 相對於管道符 | 的優勢:

  1. 引數構建:xargs 可以將多個輸入項組合成一個引數列表,然後一次性傳遞給命令。這對於需要處理大量檔案或資料的場景特別有用。

  2. 處理複雜輸入:xargs 提供了多種選項來處理複雜的輸入,比如指定分隔符(-d)、限制每次命令執行的引數個數(-n)以及使用自定義的佔位符(-I)。

  3. 安全性:在處理包含空格、換行符等特殊字元的檔名時,xargs-0 選項可以與 find 命令的 -print0 選項結合使用,以確保正確處理這些特殊字元。

  4. 靈活性:xargs 可以與其他命令和工具結合使用,以構建複雜的命令列管道。例如,你可以將 find 命令的輸出透過管道傳遞給 xargs,然後使用 xargs 來執行 rm 命令刪除找到的檔案。

tr命令

tr 主要用於替換或刪除檔案中的字元。tr 命令透過從標準輸入讀取資料,然後對其進行處理,並將結果輸出到標準輸出(通常是螢幕,但也可以重定向到檔案)。

常用選項

  • -c--complement:取字符集的補集,即處理不在指定字符集中的字元。
  • -d--delete:刪除指定字符集中的字元。
  • -s--squeeze-repeats:將連續的重複字元壓縮為一個。
  • -t--truncate-set1:將 SET1 截斷為與 SET2 相同的長度。
tr [OPTION]... SET1 [SET2]

SET1:指定要轉換或刪除的字符集合。
SET2:指定用於替換 SET1 中字元的字符集合(如果提供)。如果 SET2 的長度小於 SET1,則 SET2 會被重複以匹配 SET1 的長度。如果 SET2 未提供,則 SET1 中的字元會被刪除。

示例

  1. 將小寫字母轉換為大寫字母:
echo "hello world" | tr 'a-z' 'A-Z'
  1. 刪除檔案中的數字:
echo "abc123def456" | tr -d '0-9'
  1. 將連續的空格壓縮為一個空格:
echo "This   is    a   test." | tr -s ' '
  1. 使用補集刪除所有非字母字元:
echo "Hello, World! 123" | tr -cd 'a-zA-Z'

輸出:

HelloWorld

綜合示例

echo "file1,txt:file2,txt:file3,txt" | tr ':,' '\n' | xargs -n 2 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

拆解

echo "file1,txt:file2,txt:file3,txt" | tr ':,' '\n'

file1.txt
file2.txt
file3.txt

  1. | tr ':,' '\n'

    管道符號|echo命令的輸出作為tr命令的輸入。tr命令是一個字元轉換工具,這裡它被用來將輸入字串中的:,替換為換行符\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

相關文章