В Linux как обрезать вывод командной строки?


56

Если я grep -nr sumthin *попал в каталог с исходным кодом, он также выбрасывает очень длинные строки из уменьшенных файлов JavaScript или CSS. Я хочу получить только первые 80 символов в строке.

Например, регулярный grepдает мне это:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:10px;z-index:13;}.arrow2{cursor:pointer;position:absolute;right:5px;bottom:10px;z-index:13;}.calendarModule{z-index:100;}.calendarFooterContainer{height:25px;text-align:center;width:100%!important;z-index:15;position:relative;font-size:15px!important;padding:-2px 0 3px 0;clear:both!important;border-left:1px solid #CCC;border-right:1px  ... etc.

но я хотел бы получить только это вместо этого:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:

Какая команда Linux может сделать это?


«уменьшенная»? Что это обозначает?
CarlF


Благодарю. Правильная ссылка - en.wikipedia.org/wiki/Minification_%28programming%29
CarlF

Обе ссылки ведут на одну и ту же страницу для меня.
Виктор

Ответы:


80

О боже, я совсем забыл cut!

grep -nr sumthin * | cut -c -80

^ делает трюк! > _ <


4
Это не работает, если задействованы escape-последовательности или цветовые коды; возьмите для примераgit log --oneline --graph --color=always | cut -c -$COLUMNS
badp

1
Я получаю, что он не усекается ровно с 80 отображаемыми символами, но все равно решает мою проблему: ни одна из строк не переносится, поэтому вы по-прежнему видите только переднюю часть каждой строки (что важно в моем конкретном случае использования, поэтому я можно увидеть <file>:<linenumber>вывод grep -n).
Никки Эрвин Рамирес

1
Длинные комментарии коммитов также «ломают» вывод команды вашего примера, если не усекают. git log --oneline --graph --color=always | moreпокажет график, прерванный завернутым текстом. i.imgur.com/X8G7SIV.png
Никки Эрвин Рамирес

да, вот почему я гуглил этот вопрос для начала :)
badp

5
Если цель состоит в том, чтобы просто иметь возможность визуально хорошо видеть вещи (не перенаправлять вывод куда-либо для использования), то less -Sэто то, что вам нужно. -Sесть --chop-long-lines. В основном это выключает перенос строк
энтропия

5

Кроме того, cutвы можете использовать fold(и в некоторых случаях fmt).
foldявляется частью coreutilsпакета.

$ echo "some very long long long text" | fold -w 5   # fold on 5 chars per line
some 
very 
long 
long 
long 
text

foldне вырезать оставшийся текст, но выводит его на следующей строке.


Спасибо за это, это может быть полезно в будущем. В моем случае я действительно хотел вырезать текст, поэтому file:linenumberпрефикс grepвывода является непрерывным, что облегчает сканирование на глаз.
Никки Эрвин Рамирес

1

Хотя это не совсем то, что вы хотите сделать, вы можете использовать awkдля печати определенное количество столбцов. В этом случае вы можете указать разделитель как ":".


Там нет конкретного разделителя, хотя. Я действительно обрезаю вывод на определенную длину, чтобы он поместился в 1 строку в терминале.
Никки Эрвин Рамирес

@ Никки тогда резать то что ты хочешь. Я уверен, что вы можете сделать что-то умное с помощью awk, чтобы получить то же самое, но на самом деле вырезать проще. ^ _-
Сардатрион
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.