L'utilizzo di “taglio” linux con stdin
Domanda
Sto cercando di dati tubo nel "taglio", per esempio, tagliare via la prima colonna di testo. Questo funziona
$ cat test.txt | cut -d\ -f2-
La lettura da stdin funziona anche:
$ cut -d\ -f2- -
? doc/html/analysis.html
? doc/html/classxytree-members.html
<CTRL+D>
Tuttavia, non appena un tubo è coinvolto, non accetta la mia <CTRL+D>
più, e non può segnalare "fine del file":
$ cut -d\ -f2- - | xargs echo
Aggiornamento: Questo è apparentemente un bug in una vecchia versione di bash (3.00.15). E funziona nelle versioni più recenti (provato 4.0.33 e 3.2.25). Sarebbe bello avere qualche soluzione, però, dal momento che non è possibile aggiornare facilmente.
Sfondo: Ho uno script / oneliner che mi dà una potenza condensata di cvs status
(lo so, CVS ...) sotto forma
? filename
es. per un file non ancora impegnati. Mi piacerebbe essere in grado di copiare + parti incollare dell'uscita da quella di comando e utilizzare questo come input per un altro comando, che aggiunge questi file CVS. Di ':
$ cut -d\ -f2- | xargs cvs add
<paste lines>
<CTRL-D> # <-- doesn't work
idee?
Soluzione
hai provato
$ cat | cut -d\ -f2- | xargs cvs add
<paste lines>
<CTRL-D> # <-- doesn't work
Altri suggerimenti
I tuoi esempi funzionano bene per me. Cosa shell stai usando? Che utilità?
Una cosa che a volte la gente viaggi è che Ctrl - D funziona solo se è il primo carattere della riga. Se si copia e incolla, si potrebbe avere a volte accidentalmente spazi bianchi come primo carattere della linea, o nessuna nuova riga alla fine del blocco incollato, nel qual caso Ctrl - D non funzionerà. Basta premere invio e quindi provare Ctrl -. D ancora e vedere se questo risolve il problema