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:
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.
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
cat
W obu przypadkach nieuzasadnione użycie . Pierwszy można napisaćgrep ' ' a.txt
, drugi podobnie zmienić.\s
pasuje 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]
.-m
opcja) do jednego ...Odpowiedzi:
Jeśli chcesz grepować tylko o jedną spację, zadając pytanie, możesz użyć czegoś takiego:
lub dla wariantów POSIX:
lub mniej czytelny wariant POSIX:
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.
źródło
-E
opcji określonej przez POSIX, która umożliwia rozszerzone wyrażenia regularne.grep -E '(^|[^ ]) ([^ ]|$)' a.txt
W każdym razie odwrotny ukośnik przed spacją nie jest potrzebny i brakuje jednego przed ostatnim nawiasem zamykającym. Ponadto w przypadku wersji,grep
które to rozumieją\s
, możesz skrócić wyrażenie dla spacji[^\s]
do\S
Myślę, że znalazłem to:
źródło
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?
źródło
'\s '
dopasuje co najmniej dwa spacje z rzędu, ponieważ dodał grupę spacji za grupą postaci\s
.\s
, mój błąd.