Adiciona uma nova linha no sed para fazer uma lista, escape de barra invertida não funciona

0

Eu quero adicionar uma nova linha após cada nome. Meu arquivo contém:

Smoker, M., Schauser, L., Yoshioka, H.,

o que eu quero:

Smoker, M
Schauser, L
Yoshioka, H

então usei várias opções no sed:

sed 's%\., %\n%g'
sed 's%\., %\r%g'
sed -E 's%\., %\r\n%g'

e similares, mas sempre recebo um r ou n em vez de uma nova linha; por exemplo,

Smoker, Mn Schauser, Ln Yoshioka, Hn
         ↑            ↑            ↑

Estou usando o MacOS sed.

    
por Aitana 17.02.2017 / 19:26

3 respostas

1

Quando o seu "sed" não suporta "\ n" no RHS de s ///, você pode tentar a seguinte abordagem:

sed -e '/\.,/!d' -e 'G;s/\.,[ ]*\(.*\(.\)\)$//' -e 'P;D' < yourfile

Supondo que não haja TABs e os dados de entrada como mostrado. Contamos com o nosso "sed" nativo para fornecer a nova linha por meio do 'G' para ser injetado no espaço padrão, e de onde ele pode ser movido anonimamente para obter o resultado desejado.

    
por 17.02.2017 / 23:55
0

Isso parece funcionar usando o BSD sed e o bash:

sed $'s/\., */\\n/g'

Ele pede para substituir cada seqüência de um ponto literal, vírgula e qualquer número de espaços para uma nova linha.

Se você não tiver um shell que suporte a sintaxe $'\n' para novas linhas, você pode tentar o seguinte:

sed 's/\., */\
/g'

Ou seja, digite tudo até a barra invertida e, em seguida, pressione Enter e complete com /g' . Como alternativa, dependendo de como sua casca modo de entrada é definido, Ctrl + V seguido por Ctrl + J pode inserir um caractere de nova linha sem avaliando o comando.

    
por 17.02.2017 / 21:39
-1

Você definitivamente deseja \n e não \r .

No entanto,

sed 's%\., %\n%g'

funcionou para mim, então não sei por que você está tendo problemas.

Talvez uma barra invertida dupla resolva seu problema. Ou, em vez de \n , tente control-v control-m (isso parecerá com ^M em sua tela).

    
por 17.02.2017 / 19:35