我正在尝试使用传递到 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/