Использование linux "cut" с stdin - PullRequest
       35

Использование linux "cut" с stdin

4 голосов
/ 09 февраля 2010

Я пытаюсь передать данные в «вырезать», скажем, вырезать первый столбец текста. Это работает

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

Чтение со стандартного ввода также работает:

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

Однако, как только канал включается, он больше не принимает мой <CTRL+D>, и я не могу сигнализировать "конец файла":

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

Обновление: Это, очевидно, ошибка в старой версии bash (3.00.15). Это работает в более поздних версиях (пробовал 4.0.33 и 3.2.25). Хотя было бы неплохо найти обходной путь, так как я не могу легко обновить.


Справочная информация: у меня есть скрипт / oneliner, который дает мне сжатый вывод cvs status (я знаю, CVS ...) в виде

? filename

например. для файла, еще не переданного. Я хотел бы иметь возможность копировать + вставлять части вывода из этой команды и использовать его в качестве ввода для другой команды, которая добавляет эти файлы в cvs. Скажи:

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

Идеи

Ответы [ 2 ]

4 голосов
/ 09 февраля 2010

вы пробовали

$ cat | cut -d\  -f2- | xargs cvs add
<paste lines>
<CTRL-D>        # <-- doesn't work
0 голосов
/ 09 февраля 2010

Ваши примеры отлично работают для меня. Какую оболочку вы используете? Какие утилиты?

Одна вещь, которая иногда вводит людей в заблуждение, заключается в том, что Ctrl - D работает, только если это первый символ в строке. Если вы копируете и вставляете, иногда вы можете случайно получить пробел в качестве первого символа строки или нет новой строки в конце вставленного блока, в этом случае Ctrl - D выиграл не работает Просто нажмите return и затем попробуйте Ctrl - D еще раз и посмотрите, решит ли это вашу проблему.

...