Como fazer grep em um espaço no texto?

cat a.txt| grep " " 

ou

cat a.txt| grep "\s " 

Comentários

  • Uso gratuito de cat em ambos os casos. O primeiro pode ser escrito grep ' ' a.txt, o segundo alterado de forma semelhante.
  • Observe que \s também corresponde a tab, return, guia vertical, alimentação de formulário e, tecnicamente, nova linha. Se você quiser apenas combinar espaço e tabulação, use [[:blank:]] ou [ \t].
  • usando gnu grep, você pode limitar o número de correspondências (opção -m) a um …
  • Este é egrep mais simples " \ s " a.txt

Resposta

Se desejar grep para apenas um espaço ao colocar sua pergunta, você usaria 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ê deseja excluir linhas que contenham mais de um espaço adjacente , isso requer explicitamente que haja um espaço, não precedido por um espaço e não seguido por um espaço.

Além disso, é importante notar que nem todas as versões do grep suportam controles de expressão regular “\ s”.

Comentários

  • Você pode omitir todas as barras invertidas do último exemplo e melhorar a legibilidade usando a opção -E especificada por POSIX, que permite regexes estendidas. grep -E '(^|[^ ]) ([^ ]|$)' a.txt Em qualquer caso, a barra invertida antes do espaço não é ' necessária e há ' uma faltando antes do parêntese de fechamento final. para versões de grep que entendem \s, você pode encurtar a expressão para não espaço [^\s] para \S
  • No entanto, isso também funciona, [[: em branco:]]

Resposta

Acho que encontrei:

grep "\+[[:space:]]\+" a.xml 

Resposta

A variante 2 encontrará apenas dois espaços. Se você usar "\s" em vez disso, ambas as variantes funcionarão.

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

Comentários

  • Por que encontrar apenas dois espaços? Acho que corresponde a qualquer espaço.
  • @Gnouc: Variante 2 conforme ele o escreveu '\s ' corresponderá a pelo menos dois espaços em uma linha, porque ele adicionou um espaço caractere após o grupo de caracteres \s.
  • Você ' está certo, eu não ' veja o espaço após \s, erro meu.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *