回答:
ビットハックが、これは、あなたが質問(受け入れるためにパイプを使用して尋ねた何をすべきか最短方法かもしれない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"
'{print $0"string"}'
はすべてをつかむために使用します。
string
すべての行に追加されます。お試しくださいecho 'input'\n'another line' | awk '{print $0"string"}'
。
cat -
stdinから読み取っ$()
て、末尾の改行を破棄するために使用します
echo input | COMMAND "$(cat -)string"
しかし、なぜパイプをドロップして、コマンド置換で左側の出力を取得しないのですか。
COMMAND "$(echo input)string"
私はしばしばパイプを使用しているので、これはstdinにプレフィックスとサフィックスを付ける簡単な方法になる傾向があります:
echo -n "my standard in" | cat <(echo -n "prefix... ") - <(echo " ...suffix")
prefix... my standard in ...suffix
pipe
し、cat
echo "my standard in" | echo -e "prefix\n$(cat -)\nsuffix"
ですか?または、より読みやすいバージョン:echo "my standard in" | printf "%s\n%s\n%s\n" "prefix" "$(cat -)" "suffix"
これを実現する方法はいくつかありますが、個人的には次のように考えます。
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秒後。
これは、完了するまでに時間がかかり、関数の出力について継続的に更新する必要がある関数の呼び出しを実行している場合に非常に役立ちます。
私はこれが数年遅れていることを知っていますが、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"
-J
標準/一般的ではないように見えることを除いて、かっこいいです Linux(のxargs
一部GNU findutils
)でエラーが発生しました:xargs: invalid option -- 'J'
これはどのシステムにありますか?
-J
Mac版用です。Linuxの場合-I
も同じ機能を実行します。
cat names | xargs -I% echo "I like % because he is nice"
IOW:の必要性-n 1
(xargs
呼び出しecho
入力の行ごとに一度、とにかく、以来、-I
意味は-L1
)また、すべての個別の引数は引用、冗長であるように思いません。
あなたが投稿したコマンドは、文字列「input」を取り、それをコマンドのstdinストリームとして使用します。これは、COMMANDが最初にstdinの内容を出力し、次にコマンドライン引数を出力しない限り、探している結果を生成しません。
あなたがやりたいことは、コマンド置換により近いようです。
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
コマンド置換を使用すると、次のようなコマンドラインを作成できます。
echo input `COMMAND "string"`
これは、最初に「文字列」を入力としてコマンドを評価し、次にそのコマンド実行の結果を行に展開して、「 `」文字の間の文字を置き換えます。
echo input $(COMMAND "string")
、バッククォートではなく、のような最新のコマンド置換を使用します。皆さんお元気で。
pbpaste | awk '{print "http://dx.doi.org/"$1}'
して取得しますhttp://dx.doi.org/10.1098/rsif.2012.0125