Como fazer grep em um espaço no texto?
cat a.txt| grep " "
ou
cat a.txt| grep "\s "
Comentários
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 degrep
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.
cat
em ambos os casos. O primeiro pode ser escritogrep ' ' a.txt
, o segundo alterado de forma semelhante.\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]
.-m
) a um …