如何连接stdin和一个string?
如何将stdin连接到一个string,像这样?
echo "input" | COMMAND "string"
并得到
inputstring
有点不好意思,但这可能是最短的方式来做你问的问题(使用pipe道接受stdout
从echo "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“”“字符之间的内容。