Чтобы добавить номер строки к текущей строке, используйтеawk
:
awk '{ printf("%d: %s\n", FNR, $0) }'
Нулевое поле, $0
, представляет собой полную строку.
Но вы потенциально подвергаете себя другим проблемам :что, если поиск -файлов содержит строку *
или $(rm important-file)
?
Расширение подсказки @steeldriver:
sed "s,^~,$HOME," search-files | xargs -n 1 grep 'search-term'
Что ж, я придумал решение , но не совсем понимаю, почему оно работает.
Если вы вставите xargs -i sh -c 'echo {}'
, тильда будет развернута.
Вся команда выглядит как:
cat search-files | xargs -i sh -c 'echo {}' | xargs -n 1 grep 'search-term'
Редактировать :Хорошо, вот как это работает :xargs
окружает каждый из [command]
и [initial-args]
одинарными кавычками, когда он выполняет вашу команду. Таким образом, в оригинальной команде grep
и {}
были указаны отдельно в одинарных кавычках. Однако, выполняя sh -c 'echo {}'
, мы превращаем echo
и {}
в одно и то же [initial-arg]
. Это позволяет sh
нормально разворачивать расширение. Если бы мы не использовали одинарную кавычку 'echo {}'
, это бы не сработало.