Как я могу расширить одну -тильду в кавычках из xargs в sh?

Чтобы добавить номер строки к текущей строке, используйтеawk:

awk '{ printf("%d: %s\n", FNR, $0) }'

Нулевое поле, $0, представляет собой полную строку.

1
26.09.2020, 02:49
2 ответа

Но вы потенциально подвергаете себя другим проблемам :что, если поиск -файлов содержит строку *или $(rm important-file)?

Расширение подсказки @steeldriver:

sed "s,^~,$HOME," search-files | xargs -n 1 grep 'search-term'
2
18.03.2021, 23:02

Что ж, я придумал решение , но не совсем понимаю, почему оно работает.

Если вы вставите 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 {}', это бы не сработало.

0
18.03.2021, 23:02

Теги

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