Базовый пример использования grep (обратите внимание, что grep не будет моим единственным вариантом использования для этого):
$ grep -Irl "foo" path/to/directory/help.js path/to/directory/config.js path/to/directory/task.js Теперь я хочу открыть config.jsфайл в Vi. Мой обычный метод будет:
$ vi path/to/directory/config.js который мне нужно было либо набрать вручную с помощью табуляции, либо я выделил имя файла из результата grep и скопировал / вставил его.
Но я хотел бы иметь возможность просмотреть файл Vi, просто указав, что это второй результат в команде grep. Так что-то вроде:
$ grep -Irl "foo" | xargs vi 2 Очевидно, что xargs не будет работать так, это был только пример. Но я пытаюсь найти способ использовать xargs (или любую другую утилиту) для достижения этой цели, и я не нахожу его.
То, что товарищ по команде предложил мне, было использовать headи tailвместе, как это:
$ grep -Irl "foo" | tail -n 1 | xargs vi получит файл task.js и
$ grep -Irl "foo" | head -n 2 | tail -n 1 | xargs vi получит config.js. Хотите знать, если есть менее многословный метод.
Выбор по номеру строки кажется странной вещью. Как узнать номер строки, если вы сначала не отображали вывод на терминале? И тогда вы должны считать строки, чтобы выяснить, какой вы хотите. Почему бы не
grep -Irl" foo "путь | grep config?