Бесплатное использование catв обоих случаях. Первое можно было написать grep ' ' a.txt, второе изменили аналогичным образом.
MadHatter
1
Обратите внимание, что \sтакже соответствует табуляция, возврат, вертикальная табуляция, подача формы и, технически, новая строка. Если вы хотите использовать только пробел и табуляцию, используйте [[:blank:]]или [ \t].
Приостановлено до дальнейшего уведомления.
используя GNU grep, вы можете ограничить количество совпадений ( -mопция) до одного ...
sendmoreinfo
Это более простой egrep "\ s" a.txt
Ответы:
6
Если вы хотите использовать grep только для одного пробела в вопросе, вы должны использовать что-то вроде:
Предполагая, что вы хотите исключить строки, которые содержат более одного соседнего пробела, это явно требует наличия одного пробела, без пробела и без пробела.
Также стоит отметить, что не все версии grep поддерживают элементы управления регулярными выражениями.
Вы можете опустить все эти обратные слэши из последнего примера и улучшить читаемость, используя -Eопцию, указанную в POSIX, которая включает расширенные регулярные выражения. grep -E '(^|[^ ]) ([^ ]|$)' a.txtВ любом случае, обратная косая черта перед пробелом не нужна, а перед последней закрывающей скобкой отсутствует одна. Кроме того, для версий, grepкоторые понимают \s, вы можете сократить выражение для без пробелов [^\s]до\S
Почему только два пробела? Я думаю, что это соответствует любому месту.
Cuonglm
1
@Gnouc: Вариант 2, когда он пишет, '\s 'будет соответствовать как минимум двум пробелам подряд, потому что он добавил пробел после группы персонажей \s.
cat
в обоих случаях. Первое можно было написатьgrep ' ' a.txt
, второе изменили аналогичным образом.\s
также соответствует табуляция, возврат, вертикальная табуляция, подача формы и, технически, новая строка. Если вы хотите использовать только пробел и табуляцию, используйте[[:blank:]]
или[ \t]
.-m
опция) до одного ...Ответы:
Если вы хотите использовать grep только для одного пробела в вопросе, вы должны использовать что-то вроде:
или для вариантов POSIX:
или менее читаемый вариант POSIX:
Предполагая, что вы хотите исключить строки, которые содержат более одного соседнего пробела, это явно требует наличия одного пробела, без пробела и без пробела.
Также стоит отметить, что не все версии grep поддерживают элементы управления регулярными выражениями.
источник
-E
опцию, указанную в POSIX, которая включает расширенные регулярные выражения.grep -E '(^|[^ ]) ([^ ]|$)' a.txt
В любом случае, обратная косая черта перед пробелом не нужна, а перед последней закрывающей скобкой отсутствует одна. Кроме того, для версий,grep
которые понимают\s
, вы можете сократить выражение для без пробелов[^\s]
до\S
Я думаю, что нашел это:
источник
Вариант 2 найдет только два пробела. Если вы используете
'\s'
вместо этого, оба варианта будут работать.Вы можете легко проверить это сами, так какой у вас вопрос?
источник
'\s '
будет соответствовать как минимум двум пробелам подряд, потому что он добавил пробел после группы персонажей\s
.\s
, моя ошибка.