Я пытаюсь получить информацию из плагинов Wordpress, имя плагина и версию.
Я нахожу, что строка, которую я ищу, может быть Plugin Name:
Plugin Name:
Plugin Name:
или * Plugin Name:
или варианты пространства. Поскольку строка, которую я ищу, находится в части комментариев, она также может включать в себя *
Думаю, я дошел до того, что получил пробел, но я не могу понять, как захватить * пространство вокруг него.
grep "^\s*Plugin Name:" $files
который работает для большинства плагинов, но не для всех, так как у некоторых есть другие персонажи, которых нужно следить.
я пробовал
(\s*)?|( \* )?
[ *]|[ \* ]?
( *| \* )?
но я с трудом переворачиваю свою голову, наматывая все это вместе.
Изменение: использование
grep -E '^\s*\*?\s*Plugin Name:' $files
найдет все, но теперь два плагина в этом случае, имеющие * Plugin Name:
будут распечатывать совершенно другой каталог в дополнение к правильной информации.
$ plugPath - это папка плагинов wordpress -/wp-content/plugins
folders='find $plugPath -maxdepth 1 -type d'
for plugin_folder in $folders
do
echo $plugin_folder
files='find $plugin_folder -maxdepth 1 -name "*.php"'
n='grep -hE '^\s*\*?\s*Plugin Name:' $files'
v='grep -hE '^\s*\*?\s*Version:' $files'
echo " -- "$n
echo " -- "$v
done
Результат, которого я ожидаю:
/home/test/accounts/account-one/public_html/wp-content/plugins/flexible-recent-posts
-- Plugin Name: Flexible Recent Posts
-- Version: 1.0.4
Пример, который работает:
Plugin Name: Flexible Recent Posts
Plugin URI: http://steelrat.info/
Description: Displays recent posts using flexible template system.
Version: 1.0.4
Author: SteelRat
Где это прикручивается:
/home/test/accounts/account-one/public_html/wp-content/plugins/portfolio-post-type
-- 2015.11.13-AccountInfo.log.csv accounts bin Desktop Documents Downloads latest.tar.gz Music Pictures Public Templates test-info.log.csv Videos wordpress Plugin Name: Portfolio Post Type
-- 2015.11.13-AccountInfo.log.csv accounts bin Desktop Documents Downloads latest.tar.gz Music Pictures Public Templates test-info.log.csv Videos wordpress Version: 0.9.1
Файл, в котором они находятся, выглядит так:
* Plugin Name: Portfolio Post Type
* Plugin URI: http://wptheming.com/portfolio-post-type/
* Description: Enables a portfolio post type and taxonomies.
* Version: 0.9.1
Просто:
grep "Plugin Name:"
недостаточно?
ОБНОВИТЬ
Затем попробуйте эту версию:
grep -E '^\s*[*]?\s*Plugin Name:'
Или эквивалент:
grep -E '^\s*\*?\s*Plugin Name:'
ОБНОВЛЕНИЕ 2
Вероятно, цикл в обновленном вопросе страдает синдромом неадекватно цитируемого файла. Я предлагаю найти однострочный интерфейс для получения практически одинаковой функциональности:
find "${WORDPRESS_PLUGIN_DIR}" -mindepth 2 -maxdepth 2 -iname "*.php" -exec grep -E '^\s*\*?\s*(Plugin Name|Version):' {} \;
Это ловит все, включая пробелы раньше, плюс одно пространство мимо Plugin Name:
grep -G "^.*Plugin Name:\s" $files
^\s*\*\s*Plugin Name:
Что в этом плохого?*
должен быть заключен в пробел:^\s*\( \* \)\?\s*
.