Применить команду к текущей строке за меньшее время?

Предположим, что следующая строка является вашим примером.

bundle exec thor migrator:export /var/tmp/backups --after "2016-12-22 00:00:00 -0700"

Вы можете использовать подстановку команд для этой работы.

bundle exec thor migrator:export /var/tmp/backups --after "$(date --iso) 00:00:00 -0700"

Но я бы скорее рекомендовал поместить вашу команду в отдельный сценарий оболочки и запустить сценарий оболочки из cron.

1
27.09.2017, 12:06
2 ответа

Один из способов добиться этого:

  1. Переход к нужному началу выделения (, например, путем его поиска ).
  2. m , за которым следует какая-нибудь буква, скажем, X , чтобы поставить отметку.
  3. Перейти в конец выделения.
  4. |X(это переключит на приглашение !, где вы должны написать команду, которая будет выбрана на стандартном вводе.
  5. Введите команду и нажмите RET
1
27.01.2020, 23:33

Вы можете использовать команду|для передачи части файла через другую программу, но эта часть всегда состоит как минимум из двух строк. Вы можете взломать его вместе с метками и tail, хотя:

  1. Когда нужная строка находится вверху, нажмите ma(или любую другую букву для второй ).
  2. Прокрутите вверх на одну строку с помощью k или Вверх .
  3. Нажмите | , а затем букву, которую вы выбрали вместо a выше.
  4. Введите tail -n 1 |..., где ...— любая команда, которая будет получать эту строку в качестве стандартного ввода.

tail -n 1даст нам только вторую строку, которая нас интересует. ...делает с этой строкой то, что хочет.

Если вы хотите использовать строку в качестве аргумента команды вместо стандартного ввода, вы можете использовать xargsили другую оболочку:

tail -n 1 | xargs ls -l

Если эта команда что-то отображает, она не останется видимой на экране, но вы можете снова передать ее в less:

tail -n 1 | xargs ls -l | less

Это будет вложенныйless:вы выйдете из него, а затем вернетесь в исходный lessи сможете повторить процесс.


Если команда каким-то образом интерактивна, как текстовый редактор, и не хочет, чтобы ее стандартный ввод был вертикальной чертой или нулем,вы можете использовать процессshв середине, чтобы запустить команду и снова открыть tty:

xargs sh -c 'vim "$@" < /dev/tty' sh

BSD xargsтакже имеет опцию -o, позволяющую делать то же самое.

1
27.01.2020, 23:33

Теги

Похожие вопросы