1

Как я могу передать файлы из grep, чтобы открыть все соответствующие файлы?

Я пробовал grep -li "type" * | open , но это не работает.

3 ответа3

1
IFS=$'\n'; for i in $(grep -rli "type" *); do open "$i"; done

IFS необходим, чтобы не разбивать имена файлов, содержащие пробелы.

1

Используйте цикл чтения строки:

| while read line

Если

$ grep -l something *.py
file1.py
file2.py

затем

$ grep -l something *.py | while read line ; do open "$line" ; done

Эквивалентно

$ open "file1.py"
$ open "file2.py"

Использование кавычек типа "$line" вместо просто $line позволяет ему сопоставлять имена файлов, содержащие пробелы, в противном случае имена файлов с пробелами вызовут ошибки.
Обратите внимание, что line - это просто часто используемое имя для переменной в этом использовании. Это может быть так же легко

$ grep -l something *.py | while read potato ; do open "$potato" ; done
0

Есть много способов сделать это (используя find/exec, xargs, ...), один из них может быть:

grep -li "type" * | while read file; do echo "processing $file"; done

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