Pergunta

Greetings, como faço para executar o seguinte em BSD sed?

sed 's/ /\n/g'

Do homem páginas afirma que \ n será tratado literalmente dentro de uma cadeia de substituição, como faço para evitar esse comportamento? Existe uma alternativa?

Eu estou usando Mac OS Snow Leopard, eu posso instalar o Fink para obter GNU sed.

Foi útil?

Solução

Em um shell, você pode fazer:

    sed 's/ /\
/g'

bater a tecla enter após a barra invertida para inserir uma nova linha.

Outras dicas

Outra forma:

sed -e 's/ /\'$'\n/g'

Consulte aqui .

Para facilidade de uso, eu, pessoalmente, muitas vezes usam

cr="\n" 
# or (depending version and OS)
cr="
"

sed "s/ /\\${cr}/g"

para que fique em 1 linha.

Para expandir a resposta de @ sikmir: Em Bash, que é o shell padrão no Mac OS X, tudo que você precisa fazer é colocar um personagem $ na frente da string que contém a sequência de escape que você quer se interpretada. Bash irá traduzi-lo automaticamente para você.

Por exemplo, eu removidos todos os MS-DOS retornos de carro de todos os arquivos de origem em lib/ e include/ escrevendo:

grep -lr $'\r' lib include | xargs sed -i -e $'s/\r//'
find . -name '*-e' -delete

BSD grep teria interpretado '\r' corretamente por conta própria, mas usando $'\r' não dói.

BSD sed teria 's/\r//' mal interpretado por conta própria, mas usando $'s/\r//', eu evitado essa armadilha.

Observe que podemos colocar $ na frente de toda a cadeia, e ele vai cuidar de todas as sequências de escape em toda a string.

$ echo $'hello\b\\world'
hell\world
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top