regex - 在 shell 中使用 grep 时,PCRE 正则表达式似乎不起作用

标签 regex linux grep sh

我正在尝试使用传递到 grep 中的 PCRE 正则表达式为反编译的 DTS 文件输出使用捕获组的节点。我只对 key-samkey {(...)}; 节点感兴趣。

关于我可能做错了什么的任何想法,或者您能指出任何替代方法来提取节点及其内容吗?我不能使用 bash=~ 运算符,因为要求我们只能使用 sh

我试过模式:

/(key-samkey {[.]*.+?[.]*};)/s

(key-samkey {[\s\S]*.+?(?=};))

我使用的确切命令是:

cat {输入文件} | grep -Po "{pattern}"

这两种模式在使用 PCRE 语法的在线正则表达式测试网站上似乎都能正常工作,但在从 shell 执行时会失败。

我运行模式匹配的文件结构如下:

/dts-v1/;

/ {

    signature {

        key-samkey {
            required = "conf";
            algo = "sha256,rsa4096";
            rsa,r-squared = <xxxxxxxx>;
            rsa,modulus = <xxxxxxxx>;
            rsa,exponent = <0xxx 0xxxxxx>;
            rsa,n0-inverse = <0xxxxxxxxx>;
            rsa,num-bits = <0xxxxx>;
            key-name-hint = "samkey";
        };
    };
};

最佳答案

使用 sed 定义一系列行更简单:

sed -n '/key-samkey {/,/};/p' file

关于regex - 在 shell 中使用 grep 时,PCRE 正则表达式似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58555850/

相关文章:

regex - 在python中将相似的字符串分组为单个组

linux - bash 中的简单正则表达式解析

linux - grep 函数中的最大计数无效

java - 在 spring 中将正则表达式设置为属性值

java - 使用 Java 正则表达式分隔字符串中的连续字符

linux - 在 linux 中为 libudev 添加信息到设备

linux - 如何检测进程当前是否正在转储核心?

mysql - 无法从损坏的 MySQL 转储文件访问表

linux - Grep:与 -e 和 -o 选项一起使用

正则表达式负后视和前瞻 : equivalence and performance