2010-02-09 8 views
3

J'essaie de canaliser les données dans "couper" pour, disons, couper la première colonne de texte. Cela fonctionneUtilisation de linux "couper" avec stdin

$ cat test.txt | cut -d\ -f2- 

lecture de stdin fonctionne aussi:

$ cut -d\ -f2- - 
? doc/html/analysis.html 
? doc/html/classxytree-members.html 
<CTRL+D> 

Cependant, dès qu'un tuyau est impliqué, il n'accepte pas mon <CTRL+D> plus, et je ne peux pas signaler « fin fichier ":

$ cut -d\ -f2- - | xargs echo 

Mise à jour: Ceci est apparemment un bug dans une ancienne version de bash (3.00.15). Il fonctionne dans les versions plus récentes (essayé 4.0.33 et 3.2.25). Il serait bon d'avoir une solution de contournement, cependant, car je ne peux pas facilement mettre à niveau.


Contexte: J'ai un script/oneliner qui me donne une sortie condensée de cvs status (je sais, CVS ...) sous la forme

? filename 

par exemple pour un fichier non encore engagé. J'aimerais pouvoir copier + coller des parties de la sortie de cette commande et l'utiliser comme une entrée pour une autre commande, qui ajoute ces fichiers à cvs. Dire:

$ cut -d\ -f2- | xargs cvs add 
<paste lines> 
<CTRL-D>  # <-- doesn't work 

Idées?

Répondre

4

Avez-vous essayé

$ cat | cut -d\ -f2- | xargs cvs add 
<paste lines> 
<CTRL-D>  # <-- doesn't work 
+0

Cela fonctionne en principe, mais pas dans mon cas. Il s'avère que le problème était une très ancienne version de bash. Par ailleurs, le 'chat' dans votre exemple ne fait rien et peut être omis. Il ne fait que passer l'entrée du clavier à 'couper ', ce que vous obtenez quand vous appelez couper sans nom de fichier. Il y a une vieille blague qui considère la cruauté envers les animaux comme un moyen d'envoyer des chats dans les tuyaux ;-). – jdm

0

Vos exemples fonctionnent très bien pour moi. Quelle coque utilisez-vous? Quels utilitaires?

Une chose qui déclenche parfois les gens est que Ctrl - D ne fonctionne que si elle est le premier caractère de la ligne. Si vous copiez et collez, vous pouvez parfois avoir des espaces blancs comme premier caractère de la ligne, ou aucun saut de ligne à la fin du bloc collé, auquel cas Ctrl - D ne fonctionnera pas. Il suffit de frapper retour, puis essayez Ctrl - D nouveau et voir si cela résout votre problème.

+0

Je l'ai essayé à nouveau sur Ubuntu Karmic (9.10), et en effet, cela fonctionne comme prévu. Il s'avère que mon ordinateur de travail utilise la version 3.00.15 archaïque (avec laquelle je suis coincé, nous utilisons une ancienne distribution Linux pour exécuter le logiciel "legacy"). Ce serait bien de trouver une solution de contournement qui fonctionne aussi. – jdm