linux 命令值xargs与tr

管道符 | 允许将一个命令的输出作为另一个命令的输入。然而,管道符在处理某些类型的输入时存在局限性,特别是当需要将一系列输入项作为单个命令的多个参数时()。

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

posted @ 2024-11-13 15:31  Yuezc  Views(3)  Comments(0Edit  收藏  举报