Como faço para mover uma linha em um arquivo para o topo a partir da linha de comando?

0

Eu gostaria de mover um caminho em um arquivo para o topo do arquivo. Cada caminho é listado 1 por linha. Como faço para mover /someplace/2nd/ para o topo usando apenas a linha de comando?

/someplace/1st/
/someplace/2nd/
/someplace/3rd/

Então acabo com

/someplace/2st/
/someplace/1nd/
/someplace/3rd/
    
por Jason 22.01.2013 / 03:41

4 respostas

3

Como você usou a tag vim , assumirei primeiro que você se referiu à linha de comando do Vim. Se for esse o caso, então este comando fará isso.

:g/^\/someplace\/2nd\/$/m0

onde esse último caractere é um zero. Veja

:help :g
:help :m

No caso em que você quis dizer a linha de comando do shell, você pode usar vim para editar seu arquivo usando este comando.

vim -c 'g/^\/someplace\/2nd\/$m0' -cwq yourfile

Veja

:help -c
:help :wq
    
por 22.01.2013 / 04:15
4

A maneira tradicional de editar arquivos não interativamente é usando ed :

(echo '/^\/someplace\/2nd\/$/m0'; echo w; echo q ) | ed $file

Envia 3 comandos para o editor de texto ed em execução no arquivo $file :

  • /regular_expression/m0 : procure por uma linha correspondente a regular_expression e mova-a para a posição 0
  • w : escreve o arquivo
  • q : quit
por 22.01.2013 / 04:02
2
{
  sed -n '/^\/someplace\/2nd\//{p;q}' file
  sed    '/^\/someplace\/2nd\//d' file
} > temp && mv temp file
    
por 22.01.2013 / 07:52
1

Isso pode funcionar para você (GNU sed):

sed -i '1,\|/someplace/2nd/|{1{h;d};//!{H;d};G}' file
    
por 26.01.2013 / 15:28

Tags