3

чтобы удалить комментарии (начните с # и /* comment */) в settings.php , приведенная ниже команда работает нормально:

sed '/^\#/d' settings.php > outp.txt
mv outp.txt settings.php
sed '/\/\*/,/*\//d; /^\/\//d; /^$/d;' settings.php > outp2.txt
mv outp2.txt settings.php
sed '/^$/d' settings.php > outp3.txt
mv outp3.txt settings.php

Но как удалить комментарии во всех файлах, в том числе и в подкаталогах?

3 ответа3

2

Начиная с каталога, который вы хотите пройти, вы можете использовать find ./ -type f -name '*.php' -print0 | xargs -0 sed -i '/^\#/d' . xargs создает список аргументов для sed для лучшей производительности, а опция -i sed заменяет шаблон на месте (вам не нужно использовать перенаправление).

РЕДАКТИРОВАТЬ: В соответствии с man-страницей find find ./ -name '*.php' -type f -print0 | xargs -0 sed -i '/^\#/d' еще быстрее, потому что он не вызывает stat для каждого файла (опция -type).

1

Вы можете sed "на месте" с -i. Вы можете объединять команды sed с точками с запятой следующим образом: 'c1; c2; c3' Вы можете выполнять команды с помощью find - без необходимости | xargs.

find ./somedir -name "*.php" -execdir sed -i '/^\#/d;/\/\*/,/*\//d; /^\/\//d; /^$/d;;/^$/d' {} + 

Это работает для GNU-Find на Linux; возможно, в вашей находке нет -execdir, -exec также должен работать, и, возможно, в нем нет +, тогда ";" было бы простым, но не таким быстрым решением, или использование xargs, как показано выше p.vitzliputzli, с улучшением от Matt для имен файлов с пробелами и специальными символами - альтернатива.

0

Вы можете использовать Vim в режиме Ex:

find -name '*.php' -exec ex -sc g/^#/d -cx {} ';'
  1. g глобальный поиск

  2. d удалить

  3. x сохранить и закрыть

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