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:
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.
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
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.
cat
ambos os casos. O primeiro poderia ser escritogrep ' ' a.txt
, o segundo alterado da mesma forma.\s
també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]
.-m
opção) a um ...Respostas:
Se você deseja grep por apenas um espaço ao fazer sua pergunta, use algo como:
ou para variantes POSIX:
ou a variante POSIX menos legível:
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
-E
opção especificada POSIX, que permite expressões regulares estendidas.grep -E '(^|[^ ]) ([^ ]|$)' a.txt
De 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õesgrep
desse entendimento\s
, é possível encurtar a expressão para não espaço[^\s]
para\S
Eu acho que encontrei:
fonte
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?
fonte
'\s '
corresponderá a pelo menos dois espaços seguidos, porque ele adicionou um caractere de espaço após o grupo de caracteres\s
.\s
, meu erro.