Cum să grep un spațiu în text?

cat a.txt| grep " " 

sau

cat a.txt| grep "\s " 

Comentarii

  • Utilizarea gratuită a cat în ambele cazuri. Primul ar putea fi scris grep ' ' a.txt, al doilea modificat în mod similar.
  • Rețineți că \s se potrivește și cu fila, returnează, filă verticală, feed formular și, tehnic, linie nouă. Dacă doriți să potriviți doar spațiul și fila, utilizați [[:blank:]] sau [ \t].
  • utilizând gnu grep, puteți limitați numărul de potriviri (opțiunea -m) la una …
  • Acest lucru este mai simplu egrep " \ s " a.txt

Răspuns

Dacă doriți să grep pentru doar un spațiu așa cum ați pus în întrebarea dvs., ați folosi ceva de genul:

grep -e "^\s[^\s]" -e "[^\s]\s$" -e "[^\s]\s[^\s]" a.txt 

sau pentru variantele POSIX:

grep -e "^ [^ ]" -e "[^ ] $" -e "[^ ] [^ ]" a.txt 

sau varianta POSIX mai puțin lizibilă:

grep "\(^\|[^ ]\)\ \([^ ]\|$)" a.txt 

Presupunând că doriți să excludeți liniile care conțin mai mult de un spațiu adiacent , acest lucru necesită în mod explicit să existe un spațiu, nu precedat de un spațiu și nu urmat de un spațiu.

De asemenea, merită menționat faptul că nu toate versiunile grep acceptă controale de expresie regulată „\ s”.

Comentarii

  • Puteți omite toate acele bare oblice din ultimul exemplu și puteți îmbunătăți lizibilitatea utilizând opțiunea -E specificată POSIX, care permite regexuri extinse. > În orice caz, backslash-ul din fața spațiului nu este necesar ' și este nevoie de ' înainte de paranteze finală de închidere. De asemenea, pentru versiunile grep care înțeleg \s, puteți scurta expresia pentru non-spațiu [^\s] la \S
  • Totuși, și acest lucru funcționează, [[: blank:]]

Răspuns

Cred că l-am găsit:

grep "\+[[:space:]]\+" a.xml 

Răspuns

Varianta 2 va găsi doar două spații. Dacă utilizați "\s" în schimb, ambele variante vor funcționa.

Puteți testa acest lucru cu ușurință, deci care este întrebarea dvs. actuală?

Comentarii

  • De ce să găsești doar două spații? Cred că se potrivește cu orice spațiu.
  • @Gnouc: Varianta 2 pe măsură ce o scrie '\s ' se va potrivi cu cel puțin două spații la rând, deoarece a adăugat un spațiu caracter după grupul de caractere \s.
  • Ai ' dreptate, nu ' nu vezi spațiul după \s, greșeala mea.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *