对一行的第一个单词运行 xargs

对一行的第一个单词运行 xargs

有没有办法运行参数仅在一行的第一个参数上?因此,如果我的输入是来自的默认输出grep,则如下所示:

./file1       "matching string"
./file2       "matching 2"

我想要做的是打开所有文件名Vim与类似的东西| xargs vim

我可以告诉xargs它只抓取每行的第一个单词吗?

我知道还有其他方法可以做到这一点,包括通过管道传输到大王去除所有多余的行垃圾,并让 grep 仅返回文件名 - 我很好奇你是否可以使用 xargs 来做到这一点。

答案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 vixargs 运行 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)。命令行会让您爱上它。

相关内容