Использование Linux «cut» с помощью стандартного ввода
Вопрос
Я пытаюсь передать данные в «вырезку», чтобы, скажем, вырезать первый столбец текста.Это работает
$ 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
Идеи?
Решение
попытался ли ты
$ cat | cut -d\ -f2- | xargs cvs add
<paste lines>
<CTRL-D> # <-- doesn't work
Другие советы
Ваши примеры мне подходят.Какую оболочку вы используете?Какие коммунальные услуги?
Одна вещь, которая иногда сбивает людей с толку, это то, что Ctrl-Д работает только в том случае, если это первый символ в строке.Если вы копируете и вставляете, иногда у вас может случайно оказаться пробел в качестве первого символа строки или отсутствие новой строки в конце вставленного блока, и в этом случае Ctrl-Д не сработает.Просто нажмите «Return» и попробуйте Ctrl-Д еще раз и посмотрите, решит ли это вашу проблему.