如何连接stdin和一个string?

如何将stdin连接到一个string,像这样?

echo "input" | COMMAND "string" 

并得到

 inputstring 

有点不好意思,但这可能是最短的方式来做你问的问题(使用pipe道接受stdoutecho "input"到另一个进程/命令:

 echo "input" | awk '{print $1"string"}' 

输出:

 inputstring 

你准备完成什么任务? 更多的上下文可以让你更好的解决scheme。

更新 – 回应评论:

@NoamRoss

那么做你想要的更习惯的方式是:

 echo 'http://dx.doi.org/'"$(pbpaste)" 

$(...)语法被称为命令replace 。 简而言之,它执行包含在一个新的子shell中的命令,并将其stdout输出replace为在父shell中调用$(...) 。 所以你会得到,实际上:

 echo 'http://dx.doi.org/'"rsif.2012.0125" 

使用cat -从标准input读取,并把它放在$()扔掉尾随的换行符

 echo input | COMMAND "$(cat -)string" 

但是,为什么不放弃pipe道,并在命令replace中获取左侧的输出:

 COMMAND "$(echo input)string" 

我经常使用pipe道,所以这往往是一个简单的方法来前缀和后缀stdin:

 echo "my standard in" | cat <(echo "prefix... ") <(cat -) <(echo " ...suffix") prefix... my standard in ...suffix 

你可以用sed来做:

 seq 5 | sed '$a\6' seq 5 | sed '$ s/.*/\0 6/' 

在你的例子中:

 echo input | sed 's/.*/\0string/' 

有一些方法可以做到这一点,我个人认为最好的是:

 echo input | while read line; do echo $line string; done 

另一个可以用sed命令中的“string”replace“$”(行尾字符):

 echo input | sed "s/$/ string/g" 

为什么我更喜欢前者? 因为它会立即将string连接到stdin,例如使用以下命令:

 (echo input_one ;sleep 5; echo input_two ) | while read line; do echo $line string; done 

你马上得到第一个输出:

 input_one string 

然后在5秒钟后得到另一个回声:

 input_two string 

另一方面,首先使用“sed”执行括号中的所有内容,然后将其赋给“sed”,所以命令

 (echo input_one ;sleep 5; echo input_two ) | sed "s/$/ string/g" 

会输出这两行

 input_one string input_two string 

5秒后。

如果您正在执行调用需要很长时间才能完成的function的调用,并且希望不断更新函数的输出,这可能非常有用。

我知道这是晚了几年,但你可以用xargs -J选项来完成:

 echo "input" | xargs -J "%" echo "%" "string" 

而且因为它 xargs,所以你可以一次在一个文件的多行上做这个。 如果文件“名称”有三行,如:

 Adam Bob Charlie 

你可以这样做:

 cat names | xargs -n 1 -J "%" echo "I like" "%" "because he is nice" 

你发布的命令会将string“input”用作COMMAND的stdinstream,除非COMMAND首先打印出stdin的内容,然后打印出它的命令行参数,否则不会产生你正在查找的结果。

看来你想要做的更接近命令replace。

http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution

用命令replace你可以有一个像这样的命令行:

 echo input `COMMAND "string"` 

这将首先使用“string”作为input来评估COMMAND,然后将该命令执行的结果展开到一行,replace“”“字符之间的内容。