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/

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

:/^\/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ć

2
{
  sed -n '/^\/someplace\/2nd\//{p;q}' file
  sed    '/^\/someplace\/2nd\//d' file
} > temp && mv temp file

1

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

sed -i '1,\|/someplace/2nd/|{1{h;d};//!{H;d};G}' file
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.