Jak grepować jedną spację w tekście?

cat a.txt| grep " " 

lub

cat a.txt| grep "\s " 

Komentarze

  • Nieodpłatne użycie cat w obu przypadkach. Pierwsza mogłaby zostać zapisana grep ' ' a.txt, druga zmieniona podobnie.
  • Zwróć uwagę, że \s pasuje również do tab, return, tabulator pionowy, format strony i technicznie nowa linia. Jeśli chcesz dopasować tylko spację i tabulator, użyj [[:blank:]] lub [ \t].
  • używając gnu grep, możesz ogranicz liczbę dopasowań (opcja -m) do jednego …
  • To jest prostsze egrep " \ s " a.txt

Odpowiedź

Jeśli chcesz grep tylko dla jednej spacji, tak jak w swoim pytaniu, użyłbyś czegoś takiego:

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

lub dla wariantów POSIX:

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

lub mniej czytelny wariant POSIX:

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

Zakładając, że chcesz wykluczyć wiersze zawierające więcej niż jedną sąsiednią spację , to wyraźnie wymaga, aby istniała jedna spacja, nie poprzedzona spacją ani po niej spacja.

Warto również zauważyć, że nie wszystkie wersje programu grep obsługują elementy sterujące wyrażeniami regularnymi „\ s”.

Komentarze

  • Możesz pominąć wszystkie odwrotne ukośniki z ostatniego przykładu i poprawić czytelność, używając określonej w standardzie POSIX opcji -E, która włącza rozszerzone wyrażenia regularne. grep -E '(^|[^ ]) ([^ ]|$)' a.txt W każdym razie ukośnik odwrotny przed spacją nie jest ' potrzebny, a ' brakuje przed ostatnim nawiasem zamykającym. w przypadku wersji grep, które rozumieją \s, możesz skrócić wyrażenie, aby nie było spacji [^\s] do \S
  • Jednak to też działa, [[: blank:]]

Odpowiedź

Myślę, że znalazłem to:

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

Odpowiedź

Wariant 2 spowoduje znalezienie tylko dwóch spacji. Jeśli użyjesz "\s" zamiast tego oba warianty będą działać.

Możesz to łatwo przetestować samodzielnie, więc jakie jest twoje rzeczywiste pytanie?

Komentarze

  • Dlaczego znaleźć tylko dwie spacje? Myślę, że pasuje do dowolnej spacji.
  • @Gnouc: Wariant 2, gdy pisze, '\s ' będzie pasował do co najmniej dwóch spacji z rzędu, ponieważ dodał spację znak po grupie znaków \s.
  • Masz ' rację, ja nie ' nie widzę spacji po \s, mój błąd.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *