Como mover uma string de uma linha para outra

1

Eu tenho editado um arquivo de texto grande contendo pares de linhas da seguinte maneira (repetido):

\> destination_file.txt

js -e "var e='.jpg',t='b',i='14712583',h='0.us.is.example.com',s='/',n='WIV',u='jasper1123/‌​3/example.com_'+i+n.charAt(2)+n.charAt(0)+n.charAt(1); console.log('http://'+t+h+s+u.charAt(0)+s+u+e);"

VERSÃO CORRIGIDA ABAIXO:

linha 1

linha 2

linha 3

linha 4

Como posso mover a primeira linha para o final da segunda linha da seguinte forma:

linha 2

linha 1

linha 4

linha 3

O arquivo de texto contém milhares de pares de linhas como acima.

Existe um comando de terminal que posso executar para fazer isso?

Basicamente, os dados acima são o resultado da combinação e edição de várias páginas html.

Qualquer sugestão seria apreciada.

Eu cheguei até aqui em grande parte da ajuda aqui neste fórum.

    
por speld_rwong 15.06.2016 / 06:27

3 respostas

3

Supondo que a linha em branco no seu exemplo foi apenas para fins ilustrativos:

sed -e '1~2{h;d};G;s/\n//'

Essa expressão sed do GNU em detalhes:

1~2 {  # lines 1,3,5,7 etc.
  h      # save line in the hold space
  d      # delete (don't print yet) and start next line
}
# only reached on lines 2,4,6,8 etc.
G        # retrieve from hold space, append to current line
s/\n//   # delete the joining newline
    
por 15.06.2016 / 10:38
0

Suponho que a barra invertida antes do > seja apenas um erro de digitação. Você pode usar este script bash se o seu arquivo de texto for bem formado:

#!/bin/bash

while
    read -r a &&  # store one line to $a
    read -r   &&  # consume the blank line
    read -r b     # store another line to $b
do
    echo $b$a     # join those two lines
    read -r       # whatever, try to consume a blank line
done

Salvar para s.sh .

O conteúdo do arquivo é assim:

A

A-

B

B-

C

C-

depois, execute bash s.sh < file.txt para obter:

A-A
B-B
C-C
    
por 15.06.2016 / 10:20
0
$ printf '1m2\n,p\n' | ed -s file
line 2
line 1
line 3
line 4

O comando m move uma linha no editor ed . 1m2 move a linha 1 para a linha 2. ,p exibe o buffer modificado na saída padrão.

Para uma abordagem alternativa que edita o arquivo no local:

ed -s file <<END_ED
1m2
w
q
END_ED

Isso realiza a movimentação, grava o resultado de volta no arquivo e sai.

    
por 10.08.2018 / 13:51