当前位置: 首页 > Linux

【linux命令】Xargs命令应该如何使用?

时间:2023-04-07 00:40:24 Linux

今天调试环境遇到问题。我需要查询接口定义在哪个微服务中。所以我使用find./-name'interface.json'|grep/user/login找到界面的位置。每个微服务的接口都定义在一个名为interface.json的文件中。 搜索结果为空,分析原因如下:接口信息保存在interface.json文件中,但是find./-name'interface.json'查找到的内容是所有名为interface的文件.json相对路径,文件路径不包含接口信息。grep命令用于查找字符串是否在文件中。它的使用是grep[OPTIONS]PATTERN[FILE...],如果filename为空,将从标准输入匹配。执行find./-name'interface.json'命令后,结果会保存到标准输入中。 根据以上两点,我们可以确认grep命令在find./-name'interface.json'的结果中只是查找接口信息,所以结果为空。 那我们应该怎么找出自己需要的结果呢?我们要做的就是将find命令的结果作为grep的参数,让grep命令去文件中进行匹配。 这需要使用xargs命令。以前见过这个命令,但是没有遇到具体的应用场景,所以不知道什么时候会用到。xargs的用法如下:xargs[command[initial-arguments]]命令的作用是将从标准输入读取的数据作为本命令的参数作为后续命令的参数,而参数中的标准输入由空格或换行符分隔。本质上,它将读取的参数放在初始参数之后,然后执行以下命令。如果从标准输入读取的参数项很多,xargs就会执行多次。 综上所述,我们需要从微服务下的interface.json中找到搜索结果,那么我们可以使用find./-name'interface.json'|xargsgrep/user/login进行搜索。如果觉得上面的描述不够清楚,可以在linux命令行执行manxargs,也可以直接查看下面贴出的命令描述。名称xargs-从标准输入构建和执行命令行SYNOPSISxargs[-0prtx][-Eeof-str][-e[eof-str]][--eof[=eof-str]][--null][-d分隔符][--delimiter分隔符][-Ireplace-str][-i[replace-str]][--replace[=replace-str]][-l[max-lines]][-Lmax-行][--maxlines[=max-lines]][-nmax-args][--max-args=max-args][-smax-chars][--max-chars=max-chars][-Pmax-procs][--max-procs=max-procs][--process-slot-var=name][--interactive][--verbose][--exit][--no-run-if-empty][--arg-file=file][--show-limits][--version][--help][command[initial-arguments]]DESCRIPTION本手册页记录了xargs的GNU版本。xargs从标准输入中读取项目,由空格(可以用双引号或单引号或反斜杠保护)或换行符分隔,并使用任何初始参数执行一次或多次命令(默认为/bin/echo)nts后跟从标准输入读取的项目。标准输入上的空白行将被忽略。command的命令行会不断构建,直到达到系统定义的限制(除非使用了-n和-L选项)。指定的命令将根据需要多次调用以用完输入项列表。通常,调用命令的次数要比输入中的项目少得多。这通常会带来显着的性能优势。一些命令也可以并行执行;请参阅-P选项。因为Unix文件名可以包含空格和换行符,所以这种默认行为通常是有问题的;xargs不正确地处理包含空格和/或换行符的文件名。在这些情况下,最好使用-0选项,它可以防止出现此类问题。使用此选项时,您需要确保producesxargs的输入也使用空字符作为分隔符。例如,如果该程序是GNUfind,则-print0选项会为您执行此操作。如果命令的任何调用以255状态退出,xargs将立即停止而不读取任何进一步的输入。发生这种情况时,会在stderr上发出一条错误消息。