使用来自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,以便我可以递归查看所有文件。我尝试过积极的外观,但我不能定义一个固定长度的文本来搜索。
答案 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”。输入字段分隔符和输出字段分隔符设置为“=”。