Maneira correta de combinar um espaço inicial com sed (todos eles)?

0

Como combinar um espaço inicial com sed (todos eles)? Não estou falando de guias principais, mas sim apenas de espaços iniciais.

De um pequeno teste que fiz no Nano, isso parece estar correto:

sed "s/^ //g"

Você acha algo errado com este método?

Nota: "Todos eles" significa todos os espaços iniciais no documento, no caso de haver 2 ou mais, e não apenas um.

    
por user9303970 24.02.2018 / 21:49

2 respostas

5

Remover espaços iniciais: sed "s/^ *//"

Remover espaço em branco inicial: sed "s/^[[:space:]]*//"

Remova os espaços e guias principais: sed "s/^[ \t]*//" (funciona no GNU sed) ou% sed 's/^[[:blank:]]*//' (funciona com qualquer sed ) ou sed $'s/^[ \t]*//' (no ksh / Bash / etc. para fornecer uma guia literal para sed )

Como dito nos comentários, o especificador /g não faz nada, já que o início da linha aparece apenas uma vez na linha, e mesmo /g não repete o padrão mais de um. Você precisaria adicionar uma ramificação condicional explicitamente para repetir a substituição: sed -e :a -e 's/^ //' -e ta

^ * corresponde à string vazia (sem espaços) também, mas isso não importa aqui. Se você quiser corresponder linhas que tenham pelo menos um espaço, use ^ * (espaço duplo) ou ^ + em regex estendido. Por exemplo. para alterar todos os recuos para exatamente dois espaços, use sed -e 's/^ */ /' ou sed -Ee 's/^ +/ /' ( -E é suportado em, por exemplo, GNU e FreeBSD)

    
por 24.02.2018 / 22:45
0

Você pode fazer isso usando o comando abaixo awk também

 awk '{gsub("^ *","",$0);print $0}' filename
    
por 25.02.2018 / 12:58