答案1
正如其他人所说,genericxargs
无法单独完成此操作。坚持使用常见的 Unix 工具,您需要使用该cut
命令在将其发送到 xargs 之前删除额外信息。
假设您的输入如下所示:
./file1 "matching string"
./file2 "matching 2"
您可以使用|cut -f 1 -d ' ' | xargs -n 1 vi
来运行命令。
- 该
cut -f 1 -d ' '
命令仅将第 1 列的内容发送到输出。 - 告诉
xargs -n 1 vi
xargs 运行 vi,但一次只能使用一个文件。
-n 1
如果您想使用单个 vi 实例来编辑所有文件(以保留跨文件的复制/粘贴缓冲区),则可以删除。
答案2
您不能使用 xargs 本身来执行此操作。
因此,您的选择是使grep
输出仅包含您需要传递给的内容xargs
,或者通过管道cut
去除中间所需的内容。
请记住这是 *nix 方式 - 尽可能保持每个实用程序的集中,并组合使用它们以获得结果(而不是在多个实用程序中重复功能)。
答案3
使用 GNU Parallel 您可以执行以下操作:
... | grep ... | parallel --colsep ' +' -X --tty vi {1}
它也适用于 emacs:
... | grep ... | parallel --colsep ' +' -X --tty emacs {1}
您可以通过以下方式轻松安装 GNU Parallel:
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
观看介绍视频以了解更多信息:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
浏览教程 (man parallel_tutorial)。命令行会让您爱上它。