Skip to content

Instantly share code, notes, and snippets.

@3h4x
Last active August 29, 2015 14:07
Show Gist options
  • Save 3h4x/0ada626de7fe3dd206e5 to your computer and use it in GitHub Desktop.
Save 3h4x/0ada626de7fe3dd206e5 to your computer and use it in GitHub Desktop.
#!/bin/bash
COUNTER=/tmp/kernel_lines # zmienna odwolujaca sie do pliku w ktorym beda ilosci linii
if [[ ! -f $COUNTER ]]; then echo 0 > /tmp/kernel_lines; fi # jesli nie ma pliku z liniami to go stworz i upchnij tam 0
NUM=`cat $COUNTER` # ogarnij ile linijek juz jest w pliku $COUNTER
LINES=`sed '/\/\*/,/*\//d' $1 | sed '/^\/\//d' | sed '/^$/d' | wc -l` # wypierdol komentarze z C
echo "$NUM + $LINES" # pokaz ze umiesz dodac to gowno
echo $((NUM+LINES)) > $COUNTER # zapisz to gowno
# rozkminka
#---
# sedujemy $1 - $1 to lokalizacja naszego pliku wejsciowego, ktory podajemy przez FIND -> {}
# czyli za każdym razem jak find znajduje plik *.c to {} oznacza sciezke i nazwe pliku, mozesz to zwizualizowac sobie robiac echo $1
# SED
# mamy zazwyczaj cos takiego 'komenda sedowa/wyrazenie regularne/wyrazenie regularne/opcje', 'komenda/regexp/opcje', lub 'K/R/R/F,K/R/R/F'
# / jest naszym separtorem, wiec logiczne czesci seda sa oddzielone od siebie /
# '/\/\*/,/\*\//d' co to robi?
# w całym pliku znajdź /* i leć dalej aż dojdziesz do */. jak tak się stanie to wypierdol kazda linijke ktora znalazles
# rozdzielmy to na dwie części:
# pierwsza /\/\*/
# najbardziej zewnętrzne / są po prostu separatorami wyrażenia regularnego, mięsko jest w środku
# po ich odjeciu zostaje nam \/\* czyli wyrażenie regularne, będzie ono odpowiadało znalezieniu ciągu znaków /*, ale w sedzie musimy to wescepować gdyz każdy z nich ma znaczenie specjalne (/ jest naszym separatorem, a * oznacza dowolną ilość znaków)
# druga /\*\//
# \*\/ (*/) ownięte w separatory /
# na koncu mowimy sedowi co zrobić z tym -> wypierdol wszystkie linijki zmatchowane (d od delete)
# sed '/^\/\//d'
# bierzemy regexpa ze srodka
# ^\/\/ czyli jeśli na początku linii znajdziesz // to wypierdol linijkę (^ wskazuje początek linii)
# sed '/^$/d'
# ostatnie dla smaczku
# $ oznacza koniec linii, wiec calosc = wypierdol wszystkie puste linie
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment