Bash 如何将stdout中的值作为参数传递给下一个命令

Bash 如何将stdout中的值作为参数传递给下一个命令,bash,shell,awk,grep,pipe,Bash,Shell,Awk,Grep,Pipe,我想把这归咎于包括“todo | fixme”在内的代码行 我有剧本的大致流程,但很难把它合并成一个 查找带有“todo”的行 归咎于代码行 svn blame ${file} | cat -n |grep ${linenumber} 我可以用awk从第一个命令中获得$file和$linenumber,但我不知道如何将用awk提取的值导入第二个命令 我缺少将这些命令组合成一个“脚本”的粘合剂(:您可以使用awk构建命令,然后通过管道将其传输到bash: grep --color -Ern --

我想把这归咎于包括“todo | fixme”在内的代码行 我有剧本的大致流程,但很难把它合并成一个

查找带有“todo”的行

归咎于代码行

svn blame ${file} | cat -n |grep ${linenumber}
我可以用awk从第一个命令中获得$file和$linenumber,但我不知道如何将用awk提取的值导入第二个命令


我缺少将这些命令组合成一个“脚本”的粘合剂(:

您可以使用
awk
构建命令,然后通过管道将其传输到
bash

grep --color -Ern --include=*.{php,html,phtml} --exclude-dir=vendor "todo|TODO|FIXME" . |\
awk -F: '{printf "svn blame \"%s\" | cat -n | grep \"%s\"\n", $1, $2}'
它按以下格式为每个输入行打印一条命令:

svn blame "${file}" | cat -n | grep "${linenumber}"
varibales被替换。当您执行上述命令时,它们仅打印到外壳上,您可以确认是否一切正常。如果是,则向命令的in添加最后一个管道,输出将重定向到
bash
。完整的命令如下所示:

grep --color -Ern --include=*.{php,html,phtml} --exclude-dir=vendor "todo|TODO|FIXME" . |\
awk -F: '{printf "svn blame \"%s\" | cat -n | grep \"%s\"\n", $1, $2}' | bash
grep --color -Ern --include=*.{php,html,phtml} --exclude-dir=vendor "todo|TODO|FIXME" . |\
awk -F: '{printf "svn blame \"%s\" | cat -n | sed -n \"%sp\"\n", $1, $2}' | bash
一个小提示:我想您想在第一个命令中打印行号提取器,不是吗?但是
grep${linenumber}
只给出包含字符串
${linenumber}
的行。要仅打印行号,请使用该命令:
sed-n“2p”
以打印行号2为例。完整的命令如下所示:

grep --color -Ern --include=*.{php,html,phtml} --exclude-dir=vendor "todo|TODO|FIXME" . |\
awk -F: '{printf "svn blame \"%s\" | cat -n | grep \"%s\"\n", $1, $2}' | bash
grep --color -Ern --include=*.{php,html,phtml} --exclude-dir=vendor "todo|TODO|FIXME" . |\
awk -F: '{printf "svn blame \"%s\" | cat -n | sed -n \"%sp\"\n", $1, $2}' | bash

你试过xargs吗?@jaimeiwhiteside我会看看xargs thx!@jaimeiwhiteside afaik xargs不会有帮助,因为我需要几根管道后的行号值,也许我遗漏了什么?