El uso de Linux “corte” con la entrada estándar
Pregunta
Estoy intentando datos del tubo en "cortar" a, por ejemplo, cortar la primera columna de texto. Esto funciona
$ cat test.txt | cut -d\ -f2-
La lectura de la entrada estándar también funciona:
$ cut -d\ -f2- -
? doc/html/analysis.html
? doc/html/classxytree-members.html
<CTRL+D>
Sin embargo, tan pronto como una tubería está involucrado, que no acepta mi <CTRL+D>
más, y no puede ser señal de "fin de fichero":
$ cut -d\ -f2- - | xargs echo
Actualización: Esto es al parecer un error en una versión antigua de bash (3.00.15). No funciona en las versiones más recientes (4.0.33 y 3.2.25 tratado). Sería bueno tener algo de solución, sin embargo, ya que no puedo actualizar fácilmente.
Antecedentes: Tengo un script / oneliner que me da una salida de condensado de cvs status
(lo sé, CVS ...) de la forma
? filename
por ejemplo. para un archivo que no esté comprometido todavía. Me gustaría ser capaz de copiar + pegar partes de la salida de ese comando y utilizar esto como una entrada a otro comando, que se suma a estos archivos cvs. Decir:
$ cut -d\ -f2- | xargs cvs add
<paste lines>
<CTRL-D> # <-- doesn't work
Las ideas?
Solución
has
$ cat | cut -d\ -f2- | xargs cvs add
<paste lines>
<CTRL-D> # <-- doesn't work
Otros consejos
Sus ejemplos funcionan bien para mí. Lo cáscara está usando? ¿Qué utilidades?
Una cosa que a veces dispara a la gente es que Ctrl - D sólo funciona si es el primer carácter de la línea. Si copia y pega, es posible que a veces accidentalmente tener espacios en blanco como el primer carácter de la línea, o ninguna nueva línea al final del bloque pegado, en cuyo caso Ctrl - D no funcionará. Sólo tiene que darle vuelta y luego tratar Ctrl -. D de nuevo y ver si se soluciona el problema