如何将stdin连接到字符串,就像这样?
echo "input" | COMMAND "string"
并获取
inputstring
答案 0 :(得分:98)
有点hacky,但这可能是你在问题中做出的最短路径(使用管道从stdout
接受echo "input"
作为stdin
到另一个进程/命令:
echo "input" | awk '{print $1"string"}'
输出:
inputstring
你到底要完成什么任务?更多上下文可以为您提供更好的解决方案。
更新 - 回复评论:
@NoamRoss
然后,做出你想要的更惯用的方式是:
echo 'http://dx.doi.org/'"$(pbpaste)"
$(...)
语法称为command substitution。简而言之,它执行新子shell中包含的命令,并将其stdout
输出替换为在父shell中调用$(...)
的位置。所以你会得到,实际上:
echo 'http://dx.doi.org/'"rsif.2012.0125"
答案 1 :(得分:48)
使用cat -
从stdin读取,并将其放在$()
中以丢弃尾随换行符
echo input | COMMAND "$(cat -)string"
但是,为什么不放弃管道并在命令替换中获取左侧的输出:
COMMAND "$(echo input)string"
答案 2 :(得分:30)
我经常使用管道,所以这往往是一种简单的前缀和后缀stdin:
echo -n "my standard in" | cat <(echo -n "prefix... ") - <(echo " ...suffix")
prefix... my standard in ...suffix
答案 3 :(得分:10)
你可以用sed:
来做seq 5 | sed '$a\6'
seq 5 | sed '$ s/.*/\0 6/'
在你的例子中:
echo input | sed 's/.*/\0string/'
答案 4 :(得分:8)
有一些方法可以实现这一点,我个人认为最好的是:
echo input | while read line; do echo $line string; done
另一个可以代替&#34; $&#34; (行尾字符)用&#34;字符串&#34;在sed命令中:
echo input | sed "s/$/ string/g"
为什么我更喜欢前者?因为它会立即将字符串连接到标准输入,例如使用以下命令:
(echo input_one ;sleep 5; echo input_two ) | while read line; do echo $line string; done
你立即获得了第一个输出:
input_one string
然后在5秒后得到另一个回声:
input_two string
另一方面使用&#34; sed&#34;首先它执行括号的所有内容,然后将它赋予&#34; sed&#34;,所以命令
(echo input_one ;sleep 5; echo input_two ) | sed "s/$/ string/g"
将输出两行
input_one string
input_two string
5秒后。
这对于执行函数调用的情况非常有用,这些函数需要很长时间才能完成,并希望不断更新函数的输出。
答案 5 :(得分:4)
我知道这已经晚了几年,但您可以使用xargs -J选项来完成此任务:
echo "input" | xargs -J "%" echo "%" "string"
由于是 xargs,您可以一次在文件的多行上执行此操作。如果文件名称为&#39;有三行,如:
Adam
Bob
Charlie
你可以这样做:
cat names | xargs -n 1 -J "%" echo "I like" "%" "because he is nice"
答案 6 :(得分:3)
您发布的命令将使用字符串“input”将其用作COMMAND的stdin流,除非COMMAND首先打印出其stdin的内容然后打印出其命令行参数,否则不会产生您要查找的结果。
看起来你想做的事情更接近命令替换。
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
使用命令替换,您可以使用如下命令行:
echo input `COMMAND "string"`
这将首先使用“string”作为输入来评估COMMAND,然后将该命令执行的结果展开到一行,替换'''字符之间的内容。
答案 7 :(得分:1)
猫将是我的选择:ls | cat - <(echo new line)
答案 8 :(得分:0)
也有效:
seq -w 0 100 | xargs -I {} echo "string "{}
将生成如下字符串:
string 000
string 001
string 002
string 003
string 004
...
答案 9 :(得分:-1)
我想在运行它之前在我的 sql 脚本前面加上“set”语句。 所以我回显“set”指令,然后将它传送给 cat。命令 cat 有两个参数:标记为“-”的 STDIN 和我的 sql 文件,cat 将它们连接到一个输出。接下来我将结果传递给 mysql 命令以将其作为脚本运行。
getElementsByXPath
附言mysql 登录名和密码存储在 echo "set @ZERO_PRODUCTS_DISPLAY='$ZERO_PRODUCTS_DISPLAY';" | cat - sql/test_parameter.sql | mysql
文件中