Como encontrar um espaço em um texto. usando grep?

13

Como grep um espaço no texto?

cat a.txt| grep ' '

ou

cat a.txt| grep '\s '
Emax
fonte
7
Uso gratuito de catambos os casos. O primeiro poderia ser escrito grep ' ' a.txt, o segundo alterado da mesma forma.
21913 MadHatter
1
Observe que \stambém corresponde à guia, retorno, guia vertical, feed de formulário e, tecnicamente, nova linha. Se você deseja combinar apenas espaço e tabulação, use [[:blank:]]ou [ \t].
Pausado até novo aviso.
usando o GNU grep, você pode limitar o número de partidas ( -mopção) a um ...
sendmoreinfo
Isso é mais simples: egrep "\ s" a.txt

Respostas:

6

Se você deseja grep por apenas um espaço ao fazer sua pergunta, use algo como:

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

ou para variantes POSIX:

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

ou a variante POSIX menos legível:

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

Supondo que você queira excluir linhas que contenham mais de um espaço adjacente, isso exige explicitamente que exista um espaço, não precedido por um espaço e não seguido por um espaço.

Além disso, vale a pena notar que nem todas as versões do grep suportam controles de expressão regular.


fonte
1
Você pode omitir todas as barras invertidas do último exemplo e melhorar a legibilidade usando a -Eopção especificada POSIX, que permite expressões regulares estendidas. grep -E '(^|[^ ]) ([^ ]|$)' a.txtDe qualquer forma, a barra invertida antes do espaço não é necessária e falta uma antes do parêntese de fechamento final. Além disso, para versões grepdesse entendimento \s, é possível encurtar a expressão para não espaço [^\s]para\S
Pausada até novo aviso.
No entanto, isso também funciona, [[: blank:]]
Emax 07/07
4

Eu acho que encontrei:

grep  "\+[[:space:]]\+" a.xml
Emax
fonte
1

A variante 2 encontrará apenas dois espaços. Se você usar '\s', as duas variantes funcionarão.

Você pode testar isso sozinho, então qual é a sua pergunta real?

Sven
fonte
1
Por que encontrar apenas dois espaços? Eu acho que combina com qualquer espaço.
precisa saber é
1
@Gnouc: A variante 2, conforme ele escreve, '\s 'corresponderá a pelo menos dois espaços seguidos, porque ele adicionou um caractere de espaço após o grupo de caracteres \s.
Sven
Você está certo, não vejo o espaço depois \s, meu erro.
precisa saber é