Как сохранить имя файла с помощью замены Perl для grep - PullRequest
2 голосов
/ 22 ноября 2010

Рассмотрим следующий вывод командной строки с использованием grep:

[gjempty@gjempty]$ find . -name "*.php" | xargs grep __construct | tail
./ilserverd/src/php/ImageLoopIntegrationService.php:  public function __construct($input, $output=null) {
./ilserverd/src/php/ImageLoopIntegrationService.php:  public function __construct($vals=null) {
./ilserverd/src/php/ImageLoopIntegrationService.php:  public function __construct($vals=null) {
./ilserverd/src/php/ImageLoopIntegrationService.php:  public function __construct($vals=null) {
./ilserverd/src/php/ImageLoopIntegrationService.php:  public function __construct($vals=null) {
./ilserverd/src/php/ImageLoopIntegrationService.php:  public function __construct($handler) {
./ilserverd/src/php/il_server_types.php:  public function __construct($vals=null) {
./ilserverd/src/php/il_server_types.php:  public function __construct($vals=null) {
./utilities/studio/legacy/full_bleed_update_photobook_themes.php:    public function __construct() {
./utilities/studio/legacy/full_bleed_update_photobook_themes.php:        parent::__construct();

Это мой первый шаг в попытке извлечь аргументы конструктора, и, поскольку это потребует ряда шагов, я пытаюсь использовать Perlкак улучшение по сравнению с grep.Но сначала я хочу сохранить имена файлов, чтобы вернуться к тем, которые указаны в моем окончательном выводе «отчета».

Но когда я переключаюсь на следующий однострочный Perl, имена файлов больше не являются частьювыход.Как я могу сохранить их и по-прежнему использовать Perl в качестве замены командной строки для grep?

[gjempty@gjempty]$ find . -name "*.php" | xargs perl -wnl -e '/__construct/ and print' | tail
  public function __construct($input, $output=null) {
  public function __construct($vals=null) {
  public function __construct($vals=null) {
  public function __construct($vals=null) {
  public function __construct($vals=null) {
  public function __construct($handler) {
  public function __construct($vals=null) {
  public function __construct($vals=null) {
    public function __construct() {
        parent::__construct();

Ответы [ 2 ]

5 голосов
/ 22 ноября 2010

Вы можете попробовать использовать $ARGV как:

perl -wnl -e '/__construct/ and print "$ARGV: $_"'
3 голосов
/ 22 ноября 2010

Создание лучшей версии grep в Perl уже сделано; это называется ack .

ack --type=php __construct

Или, если вы хотите имя файла с каждой совпавшей строкой (вместо заголовка):

ack --type=php --nogroup __construct

Обратите внимание, что вам также не нужны порции find ... | xargs .... Аргумент --type=php занимает место поиска.

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