Jak znaleźć spację w tekście. używasz grep?


13

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

cat a.txt| grep ' '

lub

cat a.txt| grep '\s '

7
catW obu przypadkach nieuzasadnione użycie . Pierwszy można napisać grep ' ' a.txt, drugi podobnie zmienić.
MadHatter

1
Pamiętaj, że \spasuje również do tabulatorów, powrotu, tabulatorów pionowych, wysuwu formularza i technicznie do nowej linii. Jeśli chcesz dopasować tylko spację i tabulator, użyj [[:blank:]]lub [ \t].
Wstrzymano do odwołania.

używając gnu grep, możesz ograniczyć liczbę dopasowań ( -mopcja) do jednego ...
sendmoreinfo

To jest prostsze egrep "\ s" a.txt

Odpowiedzi:


6

Jeśli chcesz grepować tylko o jedną spację, zadając pytanie, możesz użyć 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ę, wymaga to jednoznacznie jednej spacji, nie poprzedzonej spacją i po niej spacji.

Warto również zauważyć, że nie wszystkie wersje grep obsługują kontrolę wyrażeń regularnych.


1
Możesz pominąć wszystkie ukośniki odwrotne z ostatniego przykładu i poprawić czytelność za pomocą -Eopcji określonej przez POSIX, która umożliwia rozszerzone wyrażenia regularne. grep -E '(^|[^ ]) ([^ ]|$)' a.txtW każdym razie odwrotny ukośnik przed spacją nie jest potrzebny i brakuje jednego przed ostatnim nawiasem zamykającym. Ponadto w przypadku wersji, grepktóre to rozumieją \s, możesz skrócić wyrażenie dla spacji [^\s]do\S
Wstrzymane do odwołania.

Jednak to też działa, [[: blank:]]
Emax

4

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

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

1

Wariant 2 znajdzie tylko dwa pola. Jeśli użyjesz '\s'zamiast tego, oba warianty będą działać.

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


1
Dlaczego tylko dwie spacje? Myślę, że pasuje do każdej przestrzeni.
cuonglm

1
@Gnouc: Wariant 2 podczas wrotowania '\s 'dopasuje co najmniej dwa spacje z rzędu, ponieważ dodał grupę spacji za grupą postaci \s.
Sven

Masz rację, nie widzę miejsca później \s, mój błąd.
cuonglm
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.