¿Cómo concatenar stdin a una cadena, como esta?
echo "input" | COMMAND "string"
y obten
inputstring
Un poco hacky, pero esta podría ser la forma más corta de hacer lo que preguntó en la pregunta (use una tubería para aceptar stdout
desde echo "input"
como stdin
a otro proceso / comando:
echo "input" | awk '{print $1"string"}'
Salida:
inputstring
¿Qué tarea estás tratando de realizar exactamente? Más contexto puede brindarle más orientación hacia una mejor solución.
Actualización - respondiendo al comentario:
@NoamRoss
La forma más idiomática de hacer lo que quiere es entonces:
echo 'http://dx.doi.org/'"$(pbpaste)"
La $(...)
sintaxis se llama sustitución de comandos . En resumen, ejecuta los comandos incluidos en una nueva subcapa y sustituye su stdout
salida por donde $(...)
se invocó en la shell principal. Entonces obtendría, en efecto:
echo 'http://dx.doi.org/'"rsif.2012.0125"
pbpaste | awk '{print "http://dx.doi.org/"$1}'
y obtengohttp://dx.doi.org/10.1098/rsif.2012.0125
'{print $0"string"}'
agarrarlo todo.string
a cada línea. Pruebaecho 'input'\n'another line' | awk '{print $0"string"}'
.use
cat -
para leer desde stdin, y colóquelo$()
para deshacerse de la nueva línea finalSin embargo, ¿por qué no suelta la tubería y toma la salida del lado izquierdo en una sustitución de comando?
fuente
A menudo uso tuberías, por lo que esta suele ser una forma fácil de prefijar y sufijar stdin:
fuente
pipe
ycat
echo "my standard in" | echo -e "prefix\n$(cat -)\nsuffix"
:? O, la versión más legible:echo "my standard in" | printf "%s\n%s\n%s\n" "prefix" "$(cat -)" "suffix"
Puedes hacerlo con sed:
En tu ejemplo:
fuente
Hay algunas formas de lograr esto, personalmente creo que la mejor es:
Otro puede ser sustituyendo "$" (carácter de fin de línea) con "cadena" en un comando sed:
¿Por qué prefiero el primero? Porque concatena una cadena a stdin instantáneamente, por ejemplo con el siguiente comando:
obtienes inmediatamente la primera salida:
y luego, después de 5 segundos, obtienes el otro eco:
Por otro lado usando "sed" primero realiza todo el contenido del paréntesis y luego le da a "sed", entonces el comando
dará salida a ambas líneas
después de 5 segundos.
Esto puede ser muy útil en los casos en que esté realizando llamadas a funciones que demoren mucho en completarse y desee estar actualizado continuamente sobre el resultado de la función.
fuente
Sé que esto tiene un retraso de algunos años, pero puede lograrlo con la opción xargs -J:
Y como es xargs, puede hacer esto en varias líneas de un archivo a la vez. Si el archivo 'nombres' tiene tres líneas, como:
Podrías hacerlo:
fuente
-J
que no parece ser estándar / común. En Linux (de dondexargs
forma parteGNU findutils
) aparece el error:xargs: invalid option -- 'J'
¿En qué sistema está?-J
es para la versión Mac. Para Linux-I
realiza la misma función.cat names | xargs -I% echo "I like % because he is nice"
IOW: no es necesario el-n 1
(xargs
llamadasecho
una vez por línea de entrada de todos modos, ya que-I
implica-L1
) Además, todas las citas de arg por separado parecen ser redundantes.El comando que publicó tomaría la cadena "input" y la usaría como flujo stdin de COMMAND, que no produciría los resultados que está buscando a menos que COMMAND imprima primero el contenido de su stdin y luego imprima sus argumentos de línea de comando.
Parece que lo que quiere hacer está más cerca de la sustitución de comandos.
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
Con la sustitución de comandos, puede tener una línea de comandos como esta:
Esto primero evaluará COMMAND con "cadena" como entrada, y luego expandirá los resultados de la ejecución de esos comandos en una línea, reemplazando lo que está entre los caracteres '`'.
fuente
echo input $(COMMAND "string")
, en lugar de comillas inversas. Buena suerte a todos.gato será mi elección:
ls | cat - <(echo new line)
fuente
También funciona:
Generará cadenas como:
...
fuente