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 '

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.


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

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?


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 é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.