2013-05-09 2 views
2

Я хочу найти строку в файлах и передать полученный список файлов команде «open» OSX, открыв тем самым все файлы, содержащие указанную строку для редактирования в редакторе по умолчанию (aka not vim).Mac open grep file list

Например, бег:

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" 

может вернуться:

./folder1/file1.txt 
./folder1/file2.txt 
./folder2/file3.txt 
./file4.txt 

однако, просто обжигающе этот список открытого команды не удается:

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" | open 

Я думаю, что это из-за «новые строки» или «возврат каретки», поскольку выполняется:

open ./folder1/file1.txt ./folder1/file2.txt ./folder2/file3.txt ./file4.txt 

работ.

Я просто не уверен, как удалить символы новой строки из возвращаемого вывода и передать его команде open. Мне нужна другая команда для вывода вывода через это, чтобы правильно форматировать список файлов, чтобы затем передать список команде open. Хотя символы новой строки могут даже не быть проблемой.

P.S. - I НЕ ЗНАЮ хочу создать временный файл для этого. Однако я открыт для создания функции .zshrc или .bashrc.

+0

Пробовал с 'xargs open' в последней трубе? – abasu

+1

@abasu. Так оно и было. Вы должны отправить ответ, чтобы я мог отметить его как правильно. Если вы этого не сделаете, я увижу, как это сделать. –

+0

спасибо :) Я отправил ответ. – abasu

ответ

2

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" | xargs open

Только сохраняя open не работает, потому что команда open ожидал ввода быть правильный формат, не приходя из стандартного ввода трубы. xargs следует читать по строкам от stdin и подавать на open. Также для sidenote xargs иногда возникают проблемы с именем файла, содержащим пробелы. Поэтому с помощью find используйте опцию -print0 в конце, чтобы справиться с этим. Поиск образца с помощью xargs можно найти в man xargs