Bash Regex有多个可选捕获

时间:2015-11-18 20:06:13

标签: regex wordpress bash

我试图从wordpress插件,插件名称和版本中获取信息。

我发现我要查找的行可以是Plugin Name: Plugin Name: Plugin Name: * Plugin Name:或空格的变体。由于I" m寻找的行在注释部分,它也可能包括*

我认为,我已经获得了可选的空白,但我无法弄清楚它周围是否有空格。

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

2 个答案:

答案 0 :(得分:2)

简单:

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):' {} \;

答案 1 :(得分:0)

这会捕获所有内容,包括之前的空格,以及超过Plugin Name:

的单个空格
grep -G "^.*Plugin Name:\s" $files