Как найти пробел в тексте. используя grep?

13

Как получить один пробел в тексте?

cat a.txt| grep ' '

или

cat a.txt| grep '\s '
Emax
источник
7
Бесплатное использование catв обоих случаях. Первое можно было написать grep ' ' a.txt, второе изменили аналогичным образом.
MadHatter
1
Обратите внимание, что \sтакже соответствует табуляция, возврат, вертикальная табуляция, подача формы и, технически, новая строка. Если вы хотите использовать только пробел и табуляцию, используйте [[:blank:]]или [ \t].
Приостановлено до дальнейшего уведомления.
используя GNU grep, вы можете ограничить количество совпадений ( -mопция) до одного ...
sendmoreinfo
Это более простой egrep "\ s" a.txt

Ответы:

6

Если вы хотите использовать grep только для одного пробела в вопросе, вы должны использовать что-то вроде:

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

или для вариантов POSIX:

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

или менее читаемый вариант POSIX:

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

Предполагая, что вы хотите исключить строки, которые содержат более одного соседнего пробела, это явно требует наличия одного пробела, без пробела и без пробела.

Также стоит отметить, что не все версии grep поддерживают элементы управления регулярными выражениями.


источник
1
Вы можете опустить все эти обратные слэши из последнего примера и улучшить читаемость, используя -Eопцию, указанную в POSIX, которая включает расширенные регулярные выражения. grep -E '(^|[^ ]) ([^ ]|$)' a.txtВ любом случае, обратная косая черта перед пробелом не нужна, а перед последней закрывающей скобкой отсутствует одна. Кроме того, для версий, grepкоторые понимают \s, вы можете сократить выражение для без пробелов [^\s]до\S
Пауза до дальнейшего уведомления.
Однако это тоже работает, [[: blank:]]
Emax
4

Я думаю, что нашел это:

grep  "\+[[:space:]]\+" a.xml
Emax
источник
1

Вариант 2 найдет только два пробела. Если вы используете '\s'вместо этого, оба варианта будут работать.

Вы можете легко проверить это сами, так какой у вас вопрос?

Sven
источник
1
Почему только два пробела? Я думаю, что это соответствует любому месту.
Cuonglm
1
@Gnouc: Вариант 2, когда он пишет, '\s 'будет соответствовать как минимум двум пробелам подряд, потому что он добавил пробел после группы персонажей \s.
Свен
Вы правы, я не вижу места после \s, моя ошибка.
Cuonglm