Jak przenieść linię w pliku na górę z wiersza poleceń?

0

Chciałbym przenieść ścieżkę w pliku na początek pliku. Każda ścieżka jest wymieniona 1 na linię. Jak się ruszam /someplace/2nd/ do góry używając tylko linii poleceń?

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

Więc kończę

/someplace/2st/
/someplace/1nd/
/someplace/3rd/
Jason
źródło
Z wiersza poleceń zawsze łatwiej jest wygenerować nowy plik, podając plik wejściowy, niż edytować plik na miejscu (zmienić jego zawartość). Czy to dla ciebie wystarczająco dobre? Po wygenerowaniu nowego pliku zawsze możesz przenieść go z powrotem do oryginalnej nazwy pliku (w ten sposób zgniatając oryginalny plik).
Celada

Odpowiedzi:

3

Odkąd użyłeś vim tag Zakładam, że masz na myśli linię poleceń Vima. Jeśli tak jest, to polecenie to zrobi.

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

gdzie ten ostatni znak to zero. Widzieć

:help :g
:help :m

W przypadku, gdy miałeś na myśli linię poleceń powłoki, możesz użyć vim aby edytować plik za pomocą tego polecenia.

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

Widzieć

:help -c
:help :wq
garyjohn
źródło
:/^\/someplace\/2nd\/$/m0, bez używania :g, powinno wystarczyć, może z krótszym wzorem.
romainl
Szukałem wersji wiersza poleceń. Użyłem wzoru, jak sugerował romainl. Działa świetnie. Przejdź do aktualizacji mojego skryptu, aby użyć komendy vim. Dziękuję wam obu.
Jason
4

Tradycyjnym sposobem edycji plików na miejscu nieinteraktywnie jest użycie ed:

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

To wysyła 3 polecenia do ed edytor tekstu uruchomiony na pliku $file:

  • /regular_expression/m0: szukaj dopasowania linii regular_expression i przenieś go do pozycji 0
  • w: napisz plik
  • q: porzucić
Celada
źródło
2
{
  sed -n '/^\/someplace\/2nd\//{p;q}' file
  sed    '/^\/someplace\/2nd\//d' file
} > temp && mv temp file
glenn jackman
źródło
1

Może to działać dla ciebie (GNU sed):

sed -i '1,\|/someplace/2nd/|{1{h;d};//!{H;d};G}' file
potong
źródło