linux 正则表达式与任何字符和可能的空格不工作

tjjdgumg  于 2023-10-16  发布在  Linux
关注(0)|答案(2)|浏览(94)

我使用sed来实现这一点,但它与其他正则表达式是一样的。
尝试从WordPress wp-config.php文件中获取DB_NAME,在本例中为test。此外,我无法控制是否使用单引号(')或双引号(“)。空间可能存在…这些是我可以期待的一些例子:

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:]之后,只有第二行返回预期的test。其他人都附上了报价。
为什么会这样?* *.不应该捕获引号和[:space:]]吗?**catch a space,if it's there?**catch a space,if it's there?
我知道我可以用途:

['\|\"]

捕捉引号而不是点,但想知道为什么这是...

8ftvxx2r

8ftvxx2r1#

(.*)捕获引号,括号外的.捕获尾部的白色空格,然后[[:space:]]?匹配0个字符。试试这样的方法:

 sed -E -n "s/define\([[:space:]]?.DB_NAME.,[[:space:]]?['\"](.*)['\"][[:space:]]?\);/\1/p"
input.txt
test
test
test
fslejnso

fslejnso2#

可以使用awk

awk -F "['\"]*" '{print $4}' file.php
test
test
test

相关问题