ce face grep -v ‘^#’? (Programare, Shell)

user1107731 a intrebat.

Programul meu arată astfel.

ALL=`cat $1 | grep -v '^#' | wc -l`
FINISHED="0"

for i in `cat $1 | grep -v '^#'`; do
        echo "PROBE $i"
 I will be doing some operation
FINISHED=`echo $FINISHED"+1"|bc`

Voi rula acest script dând ca parametru un nume de fișier în care va fi prezentă o listă de sonde.

Am 2 întrebări

  1. Ce face grep -v '^#' înseamnă. Am învățat că '^ este utilizat de obicei pentru a potrivi un anumit șir de caractere. Dar în numele de fișier pe care îl dau nu există niciun #. În plus, primesc numărul total de sonde pentru cat $1 | grep -v '^#' | wc -l.

  2. echo $FINISHED"+1"|bc. Aici aveți vreo idee despre motivul pentru care dezvoltatorul a adăugat |bc?

Comentarii

  • Grep bit se potrivește doar cu liniile care nu încep cu #, dacă îmi amintesc corect -v. ^ este regex pentru începutul șirului, iar # ar trebui să fie doar atât. Dacă nu mă înșel, -v inversează potrivirea, astfel încât veți obține toate liniile care nu sunt comentarii (deoarece # este de obicei markerul de comentariu al fișierului de conf). –  > Por ssube.
  • De asemenea, dacă folosiți shell-ul BASH, FINISHED=`echo $FINISHED"+1"|bc` poate fi probabil înlocuit cu FINISHED=$((FINISHED+1)) — eliminând necesitatea de a crea un subproces suplimentar. –  > Por jedwards.
3 răspunsuri
Burhan Khalid
  • ^ înseamnă „început de linie”
  • # este caracterul literal #
  • -v înseamnă „inversează potrivirea” în grep, cu alte cuvinte, returnează totul care nu corespund linii.

Puneți-le împreună, iar expresia dvs. este „selectați toate liniile care nu încep cu #

| este caracterul pipe, care ia ieșirea comenzii din partea stângă și o folosește ca intrare a comenzii din partea dreaptă. bc este ca un calculator în linie de comandă (pentru a face calcule matematice de bază).

Comentarii

  • & pentru a adăuga, MULTE (nu toate) limbi au # ca caracter de comentariu de linie. Deci grep -v ^# ar corespunde liniilor fără comentarii. –  > Por anishsane.
  • Aceste limbi permit, de obicei, ca comentariul să nu înceapă la începutul liniei, deci nu va funcționa cu linii de genul „<space>#<comment”. –  > Por aragaer.
Sony Mitto

Aș folosi acest lucru pentru a exclude comentariile din codul pe care îl citesc. Astfel, toate liniile de comentarii încep cu # și nu vreau să le văd dacă sunt prea multe.

grep -v '^#'

Batcher

Avem moduri diferite de calcul. Alegeți-o pe cea care vă place.

a=`echo 1+1 | bc`; echo $a
b=$((1+1)); echo $b
c=`expr 1 + 1`; echo $c
let d=1+1; echo $d

Tags: