Удалить закрывающие теги PHP из всех файлов - PullRequest
3 голосов
/ 06 июня 2019

Я пытаюсь найти и удалить все закрывающие теги PHP ?> из конца файлов PHP на веб-сайте.

Я использовал:

find . -type f -exec sh -c 'tail -n 1 "$1" | grep -q "?>" && printf "%s\n" "$1"' -- {} \;

И это дает мне список всех файлов, которые заканчиваются тегом PHP, который ожидается, но этот список также содержит более 500 файлов, поэтому ручная обработка займет много времени.

Я ищу относительно простой способ сделать это, если это возможно.

Я пытался использовать sed примерно так:

 find . -type f -exec sh -c 'tail -n 1 "$1" | grep -q "?>" && printf "%s\n" "$1"' -- {} \; | sed -i '$ d' ./*

Но это имеет две проблемы; он не попадает в каталоги и удаляет последнюю строку из всех файлов, а не только тех, которые имеют закрывающий тег PHP.

Я ожидаю, что он найдет все файлы с ?> в самой последней строке (я могу заставить это работать), а затем удалите последнюю строку с тегом.

Мне кажется, я совсем рядом, просто что-то упустил.

1 Ответ

1 голос
/ 06 июня 2019

Чтобы удалить последнюю строку, содержащую ?>, вы можете использовать

sed '${/?>/d;}'

'${/?>/d;}' означает:

  • $ - получить только последнюю строку
  • /?>/ - сопоставить строку, только если она содержит ?> текст
  • d - удалить строку.

Чтобы рекурсивно запустить команду sed наиспользование каталога

cd /your/dir/here && find . -type f -print0 | xargs -0 sed -i '${/?>/d;}'

Более конкретные решения для рекурсивного сопоставления файлов см. в Как выполнить рекурсивный поиск / замену строки с помощью awk или sed?

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