Linux shell 脚本攻略学习笔记4

xiaoxiao2021-02-28  107

xargs:

  该xargs出场了,它擅长将标准输入数据转换成命令行参数。 xargs能够处理stdin并将其转换为特定命令的命令行参数。xargs也可以将单行或者多行文本输入转换为其他格式,例如单行变多行,多行变单行。

  例1:将多行输入转换成单行输出。

   

        将单行输入转换成多行输出。

   指定每行最大的参数数量n,我们可以将任何来自stdin的文本划分成多行,每行n个参数。每一行参数都是由"  "隔开的字符串。空格是默认的定界符。下面的方法可以将单行划分成多行:

       

 来看看 xargs的其他用法:

    (1):可以用自己的定界符来分割参数。用-d 选项为输入指定一个定制的定界符:

   

   在上面的代码中,stdin是一个包含了多个X字符的字符串。我们可以用-d 将X作为输入定界符。在这里,我们明确指定X作为输入定界符,而在默认情况下 , xargs默认采用内部字段分割(空格) 作为定界符。

  再结合-n选项,我们可以将输入划分成多行,而每行包含2个参数:  

 (2):将格式化或者自定义的参数传递给脚本:

    首先写一个简单的脚本 cecho.sh,它的作用是将命令行参数打印出来,并以#字符打印出来作为结尾,脚本如下:

#!/bin/bash echo $* '#' 我们尝试运行它:

正是我们预期的结果。假如 有一个包含着参数列表的文件args.txt(每行一个参数)。我们需要用两种将这些参数传递给一个命令(cecho.sh)。第一种方法,需要每次提供一个参数:

./ cecho.sh args1 ./ cecho.sh args2 ./ cecho.sh args3 或者,每次需要提供两个或三个参数。提供三个参数是,它看起来像这样:

./ cecho.sh arg1 arg2 ./ cecho.sh arg3第二种方法,需要一次性提供所有的命令参数:

./cecho.sh arg1 arg2 arg3 上面的问题也可以用xargs来解决,我们有一个名为args.txt的参数列表文件,这个文件内容如下:

就第一个问题,我们可以将这个命令执行多次,每次使用一个参数:

每次执行需要X个参数的命令时,使用:

INPUT |xargs -n X 例如:

就第二个问题,为了在执行命令是一次性提供所有的参数,可以使用:

(3):结合find 使用 xargs

  例1:

  用find匹配并列出所有".txt"文件,然后用xargs将这些文件删除:

$ find . -type f -name "*.txt" -print0 | xargs -0 rm -f这样就可以删除所有.txt文件。xargs -0将 \0作为输入定界符。

   例2:

  统计所有C程序文件的行数,是大多数程序员都会遇到的任务,完成这项任务的代码:

$ find source_code_dir_path -type f -name "*.c" -print0 |xargs -0 wc -l 先到这。下一次学习命令tr的详细操作。。  

  

转载请注明原文地址: https://www.6miu.com/read-50722.html

最新回复(0)