提问人:ecotechie 提问时间:9/28/2023 最后编辑:ecotechie 更新时间:9/28/2023 访问量:52
具有任何字符的正则表达式,也许空格不起作用
Regex with any character and maybe a space not working
问:
我正在为此使用 sed,但它与其他正则表达式大致相同。
尝试从 WordPress wp-config.php 文件中获取DB_NAME,在本例中为测试。此外,我无法控制是否使用单引号 (') 或双引号 (“)。空间可能存在...因此,以下是我可以期待的一些示例:
define( 'DB_NAME', 'test' );
define('DB_NAME','test');
define( "DB_NAME", "test" );
这是我正在使用的:
sed -E -n "s/define\([[:space:]]?.DB_NAME.,[[:space:]]?.(.*).[[:space:]]?\);/\1/p" wp-config.php
这是输出:
test'
test
test"
在最后一个 [[:space:]] 之后使用 ?,只有第二行返回预期的测试。其他人附加了引号。
为什么?难道不应该 . 抓住引号和[[:space:]]? 抓住一个空间,如果它在那里?
我知道我可以使用:
['\|\"]
捕获任何一个引号而不是点,但想知道为什么会这样......
答:
1赞
Diego Torres Milano
9/28/2023
#1
你可以使用awk
awk -F "['\"]*" '{print $4}' file.php
test
test
test
评论
0赞
Ed Morton
9/28/2023
我怀疑 OP 真的需要测试,他们的样本输入/输出不足以证明他们的真正问题。define
DB_NAME
0赞
Diego Torres Milano
9/28/2023
可能,但如果需要,他们可以在此基础上构建解决方案
1赞
Shawn
9/28/2023
#2
捕获引号,parens 的外部捕获尾随空格,然后匹配 0 个字符。尝试这样的事情:(.*)
.
[[:space:]]?
sed -E -n "s/define\([[:space:]]?.DB_NAME.,[[:space:]]?['\"](.*)['\"][[:space:]]?\);/\1/p"
input.txt
test
test
test
评论
define
DB_NAME
define
DB_NAME