什么是 grep 正则表达式来提取版本号
Version: 3.1.5
* Version: 3.1.5
会输出 3.1.5
但它不应该吸引喜欢
MIME-Version: 1.0\n
这是我的 grep 命令
grep -ri 'version\s*:\s*[0-9\.]\w*' /home/test/public_html/wp-content/plugins/plugin_name
不工作
grep -Po "(^|\s)+(Version: )\K([0-9]|\.)*(?=\s|$)" /home/test/public_html/wp-content/plugins/woocommerce/
woocommerce
是一个文件夹。woocommerce.php
该文件夹下有文件。
内容woocommerce.php
* Plugin Name: WooCommerce
* Plugin URI: http://www.woothemes.com/woocommerce/
* Description: An e-commerce toolkit that helps you sell anything. Beautifully.
* Version: 2.3.8
* Author: WooThemes
* Author URI: http://woothemes.com
* Requires at least: 4.0
* Tested up to: 4.2
在职的
grep -rPo "(^|\s|^\*)+(Version\s*:\s*)\K([0-9]|\.)*(?=\s|$)" /home/test/public_html/wp-content/plugins/attachments/
答案1
您可以使用:
grep -Po "(?<=Version: )([0-9]|\.)*(?=\s|$)"
如果你有MIME-Version: 1.0
而不是MIME-Version: 1.0\n
:
grep -Po "(^|\s)+(Version: )\K([0-9]|\.)*(?=\s|$)"
解释 :
-P
代表 PCRE,-o
仅获取该行的匹配部分(^|\s)+(Version: )
将Version
在开头或一个或多个空格处匹配,然后\K
将丢弃匹配([0-9]|\.)*
将匹配任何数字或.
零次或多次,这就是我们想要的前一个标记后面将跟有任何空白字符或行尾
测试:
$ cat file.txt
Version: 3.1.5
* Version: 3.1.5
MIME-Version: 1.0\n
$ grep -Po "(?<=Version: )([0-9]|\.)*(?=\s|$)" file.txt
3.1.5
3.1.5
$ cat file.txt
Version: 3.1.5
* Version: 3.1.5
MIME-Version: 1.0
$ grep -Po "(^|\s)+(Version: )\K([0-9]|\.)*(?=\s|$)" file.txt
3.1.5
3.1.5
答案2
你可以使用类似的东西
grep -w Version: /home/test/public_html/wp-content/plugins/plugin_name |grep -v -- -Version|awk '{print $NF}'
答案3
这会起作用
awk '/[^[:graph:]]Version/{print $NF}' file
例子
输入
Version: 3.1.5
* Version: 3.1.5
MIME-Version: 1.0
J_Version: 7.25
A.Version: 50
输出
3.1.5
3.1.5