Comment concaténer stdin en une chaîne, comme ça?
echo "input" | COMMAND "string"
et obtenir
inputstring
Un peu hacky, mais c'est peut-être le moyen le plus court de faire ce que vous avez demandé dans la question (utilisez un tube pour accepter stdout
de echo "input"
comme stdin
vers un autre processus / commande:
echo "input" | awk '{print $1"string"}'
Production:
inputstring
Quelle tâche essayez-vous exactement d'accomplir? Plus de contexte peut vous aider à trouver une meilleure solution.
Mise à jour - réponse au commentaire:
@NoamRoss
La façon la plus idiomatique de faire ce que vous voulez est alors:
echo 'http://dx.doi.org/'"$(pbpaste)"
La $(...)
syntaxe est appelée substitution de commande . En bref, il exécute les commandes incluses dans un nouveau sous-shell et substitue sa stdout
sortie à l'endroit où le a $(...)
été appelé dans le shell parent. Ainsi, vous obtiendriez, en effet:
echo 'http://dx.doi.org/'"rsif.2012.0125"
pbpaste | awk '{print "http://dx.doi.org/"$1}'
et j'obtienshttp://dx.doi.org/10.1098/rsif.2012.0125
'{print $0"string"}'
pour saisir le tout.string
à chaque ligne. Essayezecho 'input'\n'another line' | awk '{print $0"string"}'
.utilisez
cat -
pour lire à partir de stdin, et mettez-le$()
pour jeter la nouvelle ligne de finCependant, pourquoi ne pas laisser tomber le tube et saisir la sortie du côté gauche dans une substitution de commande:
la source
J'utilise souvent des tubes, donc cela a tendance à être un moyen facile de préfixer et de suffixer stdin:
la source
pipe
etcat
echo "my standard in" | echo -e "prefix\n$(cat -)\nsuffix"
:? Ou, la version la plus lisible:echo "my standard in" | printf "%s\n%s\n%s\n" "prefix" "$(cat -)" "suffix"
Vous pouvez le faire avec sed:
Dans votre exemple:
la source
Il y a quelques moyens d'y parvenir, je pense personnellement que le meilleur est:
Un autre peut être en remplaçant "$" (caractère de fin de ligne) par "string" dans une commande sed:
Pourquoi je préfère le premier? Parce qu'il concatène une chaîne à stdin instantanément, par exemple avec la commande suivante:
vous obtenez immédiatement la première sortie:
puis après 5 secondes, vous obtenez l'autre écho:
D'un autre côté, en utilisant "sed", il exécute d'abord tout le contenu de la parenthèse et ensuite il le donne à "sed", donc la commande
affichera les deux lignes
après 5 secondes.
Cela peut être très utile dans les cas où vous effectuez des appels à des fonctions qui prennent beaucoup de temps et que vous souhaitez être continuellement mis à jour sur la sortie de la fonction.
la source
Je sais que cela a quelques années de retard, mais vous pouvez le faire avec l'option xargs -J:
Et comme il s'agit de xargs, vous pouvez le faire sur plusieurs lignes d'un fichier à la fois. Si le fichier 'noms' a trois lignes, comme:
Vous pourriez faire:
la source
-J
ça ne semble pas être standard / commun. Sous Linux (oùxargs
fait partie deGNU findutils
), j'obtiens l'erreur: Surxargs: invalid option -- 'J'
quel système est-ce?-J
est pour la version Mac. Pour Linux-I
remplit la même fonction.cat names | xargs -I% echo "I like % because he is nice"
IOW: pas besoin de-n 1
(xargs
appelleecho
une fois par ligne d'entrée de toute façon, puisque l'-I
implique-L1
) De plus, toutes les citations séparées d'arg, semblent redondantes.La commande que vous avez postée prendrait la chaîne «entrée» l'utiliser comme flux stdin de COMMAND, ce qui ne produirait pas les résultats que vous recherchez à moins que COMMAND n'imprime d'abord le contenu de son stdin, puis imprime ses arguments de ligne de commande.
Il semble que ce que vous voulez faire est plus proche de la substitution de commandes.
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
Avec la substitution de commande, vous pouvez avoir une ligne de commande comme celle-ci:
Cela évaluera d'abord COMMAND avec "string" comme entrée, puis étendra les résultats de l'exécution de cette commande sur une ligne, en remplaçant ce qui se trouve entre les caractères '`'.
la source
echo input $(COMMAND "string")
, plutôt que des contre-indications. Bonne chance à tous.chat sera mon choix:
ls | cat - <(echo new line)
la source
Fonctionne également:
Générera des chaînes comme:
...
la source