如何将命令输出作为多个参数传递给另一个命令
- 2024-09-30 13:54:00
- admin 原创
- 94
问题描述:
我想将一个命令的每个输出作为多个参数传递给第二个命令,例如:
grep "pattern" input
返回:
file1
file2
file3
我想复制这些输出,例如:
cp file1 file1.bac
cp file2 file2.bac
cp file3 file3.bac
我怎样才能一次性完成这一切?例如:
grep "pattern" input | cp $1 $1.bac
解决方案 1:
您可以使用xargs
:
grep 'pattern' input | xargs -I% cp "%" "%.bac"
解决方案 2:
您可以使用$()
来插入命令的输出。因此,kill -9 $(grep -hP '^d+$' $(ls -lad /dir/*/pid | grep -P '/dir/d+/pid' | awk '{ print $9 }'))
如果您愿意,您可以使用。
解决方案 3:
为了完整起见,我还将提到命令替换并解释为什么不推荐这样做:
cp $(grep -l "pattern" input) directory/
(反引号语法cp
grep -l "pattern" input directory/
大致相同,但是它已经过时并且难以使用;不要使用它。)
grep
如果输出的文件名包含空格或 shell 元字符,则此操作将失败。
当然,如果您确切知道grep
可以生成哪些文件名,并且已验证它们都没有问题,那么使用这个是可以的。但对于生产脚本,请不要使用它。
无论如何,对于 OP 的情况,您需要单独参考每场比赛并添加扩展,无论如何xargs
,或while read
替代方案都是更好的。
在最坏的情况下(意味着有问题或未指定的文件名),通过以下方式将匹配项传递给子 shell xargs
:
grep -l "pattern" input |
xargs -r sh -c 'for f; do cp "$f" "$f.bac"; done' _
...显然循环内的脚本for
可以任意复杂。
理想情况下,您要运行的命令足够简单(或通用),您可以简单地向其传递任意长的文件名列表。例如,GNUcp
有一个-t
选项可以方便地使用xargs
(该-t
选项允许您将目标目录放在命令行的首位,因此您可以在命令末尾放置任意数量的文件):
grep -l "pattern" input | xargs cp -t destdir
将扩展为
cp -t destdir file1 file2 file3 file4 ...
xargs
查找命令行中可以容纳的尽可能多的匹配项cp
,重复传递所有文件到 所需的次数cp
。(不幸的是,这与 OP 的情况不符;如果您需要在复制时重命名每个文件,则每次调用时只需传入两个参数cp
:源文件名和要复制到的目标文件名。)
换句话说,如果您使用命令替换语法并grep
生成一个非常长的匹配列表,则可能会遇到ARG_MAX
“参数列表太长”错误;但xargs
可以通过只复制一次可以安全传递的参数数量来特别避免这种情况cp
,并在必要时运行cp
多次。
如果文件名包含换行符,上述操作仍然无法正常工作。或许还可以参阅<https://mywiki.wooledge.org/BashFAQ/020>
解决方案 4:
除了Chris Jester-Young 的好答案之外,我想说这xargs
对于这些情况也是一个很好的解决方案:
grep ... `ls -lad ... | awk '{ print $9 }'` | xargs kill -9
会成功的。总而言之:
grep -hP '^d+$' `ls -lad /dir/*/pid | grep -P '/dir/d+/pid' | awk '{ print $9 }'` | xargs kill -9
解决方案 5:
#!/bin/bash
for f in files; do
if grep -q PATTERN "$f"; then
echo cp -v "$f" "${f}.bac"
fi
done
文件可以是 .txt 或 .text,这基本上意味着文件以 .txt 或 text 结尾,或者用您想要/需要的内容替换,当然用您的替换 PATTERN。如果您对输出满意,请删除 echo。对于递归解决方案,请查看 bash shell 选项globstar
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件