老手经验谈 介绍UNIX高手的十大习惯

时间:2007-06-25 02:08:17  来源:站长资讯收集整理  作者:佚名

传递空格分隔的列表

在最简单的调用形式中,xargs 就像一个筛选器,它接受一个列表(每个成员分别在单独的行上)作为输入。该工具将那些成员放置在单个空格分隔的行上:

清单 14. xargs 工具产生的输出示例

~ $ xargs

a

b

c

Control-D

a b c

~ $

您可以发送通过 xargs 来输出文件名的任何工具的输出,以便为其他某些接受文件名作为参数的工具获得参数列表,如以下示例所示:

清单 15. xargs 工具的使用示例

~/tmp $ ls -1 | xargs

December_Report.pdf README a archive.tar mkdirhier.sh

~/tmp $ ls -1 | xargs file

December_Report.pdf: PDF document, version 1.3

README: ASCII text

a: directory

archive.tar: POSIX tar archive

mkdirhier.sh: Bourne shell script text executable

~/tmp $

xargs 命令不只用于传递文件名。您还可以在需要将文本筛选到单个行中的任何时候使用它:

清单 16. 好习惯 7 的示例:使用 xargs 工具来将文本筛选到单个行中

~/tmp $ ls -l | xargs

-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \

root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \

16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \

joe joe 3239 Sep 30 12:40 mkdirhier.sh

~/tmp $

谨慎使用 xargs

从技术上讲,使用 xargs 很少遇到麻烦。缺省情况下,文件结束字符串是下划线 (_);如果将该字符作为单个输入参数来发送,则它之后的所有内容将被忽略。为了防止这种情况发生,可以使用 -e 标志,它在不带参数的情况下完全禁用结束字符串。

了解何时 grep 应该执行计数——何时应该绕过

避免通过管道将 grep 发送到 wc -l 来对输出行数计数。grep 的 -c 选项提供了对与特定模式匹配的行的计数,并且一般要比通过管道发送到 wc 更快,如以下示例所示:

清单 17. 好习惯 8 的示例:使用和不使用 grep 的行计数

~ $ time grep and tmp/a/longfile.txt | wc -l

2811

real 0m0.097s

user 0m0.006s

sys 0m0.032s

~ $ time grep -c and tmp/a/longfile.txt

2811

real 0m0.013s

user 0m0.006s

sys 0m0.005s

~ $

除了速度因素外,-c 选项还是执行计数的好方法。对于多个文件,带 -c 选项的 grep 返回每个文件的单独计数,每行一个计数,而针对 wc 的管道则提供所有文件的组合总计数。

文章评论

共有 位CH网友发表了评论 查看完整内容