如何连接stdin和一个字符串?

时间:2012-12-14 18:12:50

标签: bash

如何将stdin连接到字符串,就像这样?

echo "input" | COMMAND "string"

并获取

inputstring

10 个答案:

答案 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 文件中