Как извлечь прямоугольник текста из файла в CLI?

Огромное примечание: я не говорю о текстовых редакторах!

Мне нужно извлечь (стандартный вывод в порядке) прямоугольник текста из текстового файла. Прямоугольник должен быть текстом между строками l1 и l2 и столбцами c1 и c2.

Я уже могу сделать это с головой, хвостом и разрезанной трубкой, и мне интересно, есть ли инструмент, который может сделать это «все сразу» (тм).

Есть идеи?

0
задан 19 May 2016 в 15:21

1 ответ

Вы могли использовать sed, это очень гибко. Например, для печати строк 2 - 5, и 4 столбца, запускающиеся в столбце 3:

sed -n '2,5 s/^.\{3\}\(.\{1,4\}\).*$/\1/p'
  • -n средства не печатают строку, если никакое соответствие
  • 2,5 средства только для строк 2 - 5
  • s/1/2/p средства заменяют 1 на 2 и печатают ее
  • ^.\{3\}, соответствие в начале строки (^) любой символ точно 3 раза
  • \( \) выбирает то, что мы произведем использование \1 в выборе части
  • .\{1,4\} замены любой символ, после того как до 4 происшествий
  • .*$ подходят любой символ в конец строки

Все вместе, это сделает то, что Вы хотите.

РЕДАКТИРОВАНИЕ:
предыдущее решение пропускает строки меньше чем с 4 символами.
А лучшее решение:

sed -n '2,5 s/^.\{0,3\}\(.\{0,4\}\).*$/\1/p'

Этот поместит пустую строку, если строка будет меньше, чем необходимые символы путем разрешения 0 столбцов, прежде чем произведено и 0 столбцов в выводе.

3
ответ дан 20 May 2016 в 01:21
  • 1
    К сожалению, кажется, что ни одна из упакованных версий не достигает этого номера версии, так компиляция источника от GitHub, кажется, единственный способ пойти †“в этом случае, I' d скорее не удаляют версию пакета, но просто пишут функцию обертки, названную in2csv, который звонит /path/to/new/in2csv в случае, если it' s названный с -n опция и обычное /usr/bin/in2csv еще. – dessert 4 November 2017 в 00:51

Другие вопросы по тегам:

Похожие вопросы: