W systemie Linux, jak obciąć dane wyjściowe z wiersza poleceń?

56

Jeśli grep -nr sumthin *znajduję się w katalogu kodu źródłowego, wyrzuca także bardzo długie wiersze ze zminimalizowanych plików JavaScript lub CSS. Chcę uzyskać tylko pierwsze 80 znaków w wierszu.

Na przykład regularne grepdaje mi to:

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.

ale zamiast tego chciałbym uzyskać właśnie to:

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

Jakie polecenie Linuksa może to zrobić?

Nikki Erwin Ramirez
źródło
„zminimalizowane”? Co to znaczy?
CarlF
Dzięki. Prawidłowy link to en.wikipedia.org/wiki/Minification_%28programming%29
CarlF
Oba linki prowadzą do tej samej strony.
Victor

Odpowiedzi:

80

OMG, zupełnie zapomniałem cut!

grep -nr sumthin * | cut -c -80

^ robi lewę! > _ <

Nikki Erwin Ramirez
źródło
4
To nie działa, jeśli zaangażowane są sekwencje specjalne lub kody kolorów; na przykładgit log --oneline --graph --color=always | cut -c -$COLUMNS
badp
1
Rozumiem, że nie obcina dokładnie 80 wyświetlanych znaków, ale nadal rozwiązuje mój problem: żadna z linii nie jest zawijana, więc nadal widzisz tylko wiodącą część każdej linii (co jest ważne w moim konkretnym przypadku użycia, więc ja widać dane <file>:<linenumber>wyjściowe grep -n).
Nikki Erwin Ramirez
1
Komentarze do długiego zatwierdzenia również „psują” dane wyjściowe polecenia próbki, jeśli nie są obcięte. git log --oneline --graph --color=always | morepokaże wykres przerywany zawiniętym tekstem. i.imgur.com/X8G7SIV.png
Nikki Erwin Ramirez
tak, właśnie dlatego przejrzałem to pytanie na początek :)
badp
5
Jeśli celem jest po prostu dobre widzenie rzeczy (nie przekierowywanie wyjścia gdzieś do użytku), to less -Sjest to, czego chcesz. -Sjest --chop-long-lines. Zasadniczo wyłącza owijanie linii
entropia
5

Inne niż cutmożesz użyć fold(i w niektórych przypadkach fmt).
foldjest częścią coreutilspakietu.

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

foldnie wycina pozostałego tekstu, ale wyświetla go w następnym wierszu.

Ivan c00kiemon5ter V Kanak
źródło
Dzięki za to może się przydać w przyszłości. W moim przypadku naprawdę chciałem wyciąć tekst, więc file:linenumberprefiks grepwyjścia jest ciągły, co ułatwia skanowanie okiem.
Nikki Erwin Ramirez,
1

Chociaż nie do końca to, co chcesz zrobić, możesz użyć awkdo wydrukowania określonej liczby kolumn. W takim przypadku możesz określić separator jako „:”.

Sardathrion
źródło
Nie ma jednak określonego separatora. Naprawdę odcinam wyjście na określoną długość, aby dopasować go do 1 linii w terminalu.
Nikki Erwin Ramirez,
@Nikki następnie cięcie jest tym, czego chcesz. Jestem pewien, że możesz zrobić coś sprytnego z awk, aby uzyskać to samo, ale tak naprawdę cięcie jest łatwiejsze. ^ _-
Sardathrion