sed正则表达式 - 当行中出现模式时,在两个双引号之间匹配文本

时间:2011-03-06 00:36:53

标签: regex linux sed grep

使用来自linux shell的批处理PHP我试图用不同的配置文件替换下面的配置文件中的许可证号。有问题的配置行可能并不总是显示相同,但​​可能有也可能没有空格,制表符等。

示例:

$config['license_number'] = "jfur2e2ev9uhuvcfu";
$config['license_number'] ="jfur2e2ev9uhuvcfu";
$config['license_number']    ="";
$config['license_number']= "jfur2e2ev9uhuvcfu";
$config[ 'license_number' ] = "jfur2e2ev9uhuvcfu";

关键是找到任何带有“license_number”(或指定的任何其他文本)的行,并用新的config参数替换双引号之间的任何内容。

我想使用sed,以便我可以递归查看所有文件。我尝试过积极的外观,但我不能定义一个固定长度的文本来搜索。

2 个答案:

答案 0 :(得分:2)

这假设每行只有一次出现:

sed '/license_number/s/"\([^"]*\)"/"foo"/' inputfile

在Perl中,您可以将\K用于可变长度的正向后视镜。

答案 1 :(得分:0)

有时解决方案可以在没有太多正则表达式的情况下解决。试试awk

$ awk 'BEGIN{OFS=FS="="}/license_number/{$2="\"foo\""}1'  file
$config['license_number'] ="foo"
$config['license_number'] ="foo"
$config['license_number']    ="foo"
$config['license_number']="foo"
$config[ 'license_number' ] ="foo"

这表示当找到“license_number”时,将第2个字段更改为“foo”。输入字段分隔符和输出字段分隔符设置为“=”。