通过管道传递多个参数

通过管道传递多个参数

我有一个命令,可以输出这种格式的无限行:

$cmd1
word1 text with spaces and so on
word2 another text with spaces and so on

我想将每一行传递给另一个命令,以便第一word行将传递给一个参数,文本的其余部分将传递给另一个参数。像这样:

$cmd2 --argword=word1 --argtext="text with spaces and so on"
$cmd2 --argword=word2 --argtext="another text with spaces and so on"

答案1

假设最终行有一个换行符(否则该行会丢失)并且cmd2设置为合理的值,shell 代码拼凑的垫片可能看起来像这样

#!/bin/sh
IFS=" "
while read word andtherest; do
    $cmd2 --argword="$word" --argtext="$andtherest"
done

因为剩余的字段应该全部集中到andtherest每个行为方式中read

答案2

尝试一下 awk:

/usr/bin/awk -f
{
    cmd=$1;
    gsub($1 " +", "")
    printf("%s --argword=%s --argtext=\"%s\"\n", cmd2, cmd, $0)
}

该输出接受 awk 变量作为名称指令2

你可以这样测试:

$ echo "word1 text with spaces and so on" | 
  awk -v cmd2=foo '{ cmd=$1; gsub($1 " +", ""); printf("%s --argword=%s --argtext=\"%s\"\n", cmd2, cmd, $0) }'
foo --argword=word1 --argtext="text with spaces and so on"

相关内容