Я хотел бы переместить путь в файле в начало файла. Каждый путь указан по 1 в строке. Как мне переместить /someplace/2nd/ наверх, используя только командную строку?

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

Так что я в конечном итоге

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

4 ответа4

4

Традиционный способ редактировать файлы без интерактивного использования - использовать ed:

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

Это отправляет 3 команды в текстовый редактор ed работающий с файлом $file:

  • /regular_expression/m0: поиск строки, соответствующей regular_expression и перемещение ее в позицию 0
  • w: написать файл
  • q: выйти
3

Поскольку вы использовали тег vim я сначала предположу, что вы имели в виду командную строку Vim. Если это так, то эта команда сделает это.

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

где этот последний символ - ноль. Увидеть

:help :g
:help :m

Если вы имели в виду командную строку оболочки, вы можете использовать vim для редактирования вашего файла с помощью этой команды.

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

Увидеть

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

Это может работать для вас (GNU sed):

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .