133

このように、stdinを文字列に連結するにはどうすればよいですか?

echo "input" | COMMAND "string"

取得します

inputstring
4

10 に答える 10

156

少しハッキーですが、これは質問で尋ねたことを実行するための最短の方法かもしれません(パイプを使用して別のプロセス/コマンドを受け入れるstdoutためecho "input"stdin

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

出力:

inputstring

あなたは正確にどのようなタスクを達成しようとしていますか?より多くのコンテキストは、より良いソリューションへのより多くの方向性を得ることができます。

更新-コメントへの応答:

@NoamRoss

次に、必要なことを行うためのより慣用的な方法は次のとおりです。

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

$(...)構文はコマンド置換と呼ばれます。つまり、新しいサブシェルで囲まれたコマンドを実行し、そのstdout出力を$(...)親シェルで呼び出された場所に置き換えます。したがって、実際には次のようになります。

echo 'http://dx.doi.org/'"rsif.2012.0125"
于 2012-12-14T18:24:31.707 に答える
69

cat -stdinから読み取るために使用し$()、末尾の改行を破棄するために挿入します

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

ただし、コマンド置換でパイプをドロップして左側の出力を取得してみませんか。

COMMAND "$(echo input)string"
于 2012-12-14T20:51:05.303 に答える
61

私はパイプをよく使用しているので、これはstdinの接頭辞と接尾辞を付ける簡単な方法になる傾向があります。

echo -n "my standard in" | cat <(echo -n "prefix... ") - <(echo " ...suffix")
prefix... my standard in ...suffix
于 2015-10-15T03:04:10.567 に答える
13

これを達成する方法はいくつかありますが、個人的には次のことが最善だと思います。

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

もう1つは、sedコマンドで「$」(行末文字)を「string」に置き換えることです。

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

なぜ私は前者を好むのですか?たとえば、次のコマンドを使用して、文字列を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秒後。

これは、完了するまでに長い時間がかかり、関数の出力について継続的に更新したい関数の呼び出しを実行している場合に非常に役立ちます。

于 2014-12-05T12:05:20.440 に答える
11

あなたはsedでそれを行うことができます:

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

あなたの例では:

echo input | sed 's/.*/\0string/'
于 2014-02-15T08:29:54.073 に答える
10

これは数年遅れていることは知っていますが、xargs-Jオプションを使用してこれを実現できます。

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

また、 xargsであるため、ファイルの複数の行で一度にこれを行うことができます。ファイル'names'に次のような3行がある場合:

Adam
Bob
Charlie

あなたができること:

cat names | xargs -n 1 -J "%" echo "I like" "%" "because he is nice"
于 2015-09-29T15:50:16.727 に答える
3

投稿したコマンドは、文字列「input」をCOMMANDのstdinストリームとして使用します。これは、COMMANDが最初にstdinの内容を出力し、次にコマンドライン引数を出力しない限り、探している結果を生成しません。

あなたがやりたいことは、コマンド置換にもっと近いようです。

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

コマンド置換を使用すると、次のようなコマンドラインを使用できます。

echo input `COMMAND "string"`

これにより、最初に「文字列」を入力としてCOMMANDが評価され、次にそのコマンド実行の結果が1行に展開され、「`」文字の間にあるものが置き換えられます。

于 2012-12-14T18:23:26.387 に答える
1

また動作します:

seq -w 0 100 | xargs -I {} echo "string "{}

次のような文字列を生成します:

string 000
string 001
string 002
string 003
string 004

..。

于 2018-04-01T18:31:43.560 に答える
1

猫が私の選択になります:ls | cat - <(echo new line)

于 2019-03-25T09:40:32.510 に答える
-1

実行する前に、SQLスクリプトの前に「set」ステートメントを追加したいと思います。そこで、「set」命令をエコーし​​て、それをcatにパイプします。コマンドcatは2つのパラメーターを取ります:「-」とマークされたSTDINと私のsqlファイル、catはそれらの両方を1つの出力に結合します。次に、結果をmysqlコマンドに渡して、スクリプトとして実行します。

echo "set @ZERO_PRODUCTS_DISPLAY='$ZERO_PRODUCTS_DISPLAY';" | cat - sql/test_parameter.sql | mysql

psmysqlのログインとパスワードが.my.cnfファイルに保存されます

于 2021-03-18T10:24:09.657 に答える