Regex 简单SED替换

Regex 简单SED替换,regex,sed,freebsd,Regex,Sed,Freebsd,只是尝试编写一个脚本来在php.ini中执行一个简单的正则表达式替换,我想做的是替换行;cgi.fix\u pathinfo=1与cgi.fix\u pathinfo=0 理想情况下,您希望避免安装任何附加软件包,因此sed似乎是一个合理的选择,因为它与FreeBSD捆绑在一起。我尝试了以下方法,但似乎不起作用: sed 's/;cgi\.fix_pathinfo=1/cgi\.fix_pathinfo=0/' /usr/local/etc/php.ini 要使用sed BSD就地更改文件内容

只是尝试编写一个脚本来在php.ini中执行一个简单的正则表达式替换,我想做的是替换行
;cgi.fix\u pathinfo=1
cgi.fix\u pathinfo=0

理想情况下,您希望避免安装任何附加软件包,因此sed似乎是一个合理的选择,因为它与FreeBSD捆绑在一起。我尝试了以下方法,但似乎不起作用:

sed 's/;cgi\.fix_pathinfo=1/cgi\.fix_pathinfo=0/' /usr/local/etc/php.ini

要使用sed BSD就地更改文件内容,可以执行以下操作:

sed -i.bak -e 's/;cgi\.fix_pathinfo=1/cgi.fix_pathinfo=0/;' /usr/local/etc/php.ini
这将创建扩展名为.bak的旧文件的副本

或者不创建副本:

sed -i '' -e 's/;cgi\.fix_pathinfo=1/cgi.fix_pathinfo=0/;' /usr/local/etc/php.ini

请注意,在这种情况下,引号之间必须包含空格和空字符串。您不能像使用GNU sed那样简单地编写
sed-i-e'…

要使用sed BSD更改文件的内容,您可以这样做:

sed -i.bak -e 's/;cgi\.fix_pathinfo=1/cgi.fix_pathinfo=0/;' /usr/local/etc/php.ini
这将创建扩展名为.bak的旧文件的副本

或者不创建副本:

sed -i '' -e 's/;cgi\.fix_pathinfo=1/cgi.fix_pathinfo=0/;' /usr/local/etc/php.ini

请注意,在这种情况下,引号之间必须包含空格和空字符串。你不能像GNU sed那样简单地编写
sed-i-e'…

但似乎不起作用:
你能详细说明出了什么问题吗?可能只是用示例输入创建一个文件并粘贴您得到的输出?您似乎不需要在点之前使用转义符号,请使用
cgi.fix_pathinfo=0
(这是一个替换模式,而不是regex搜索模式)@Sundeep抱歉,本来可以更清楚,文件没有任何变化,它保持不变。@WiktorStribiżew从不将任何脚本用双引号括起来,除非您有特定的理由不这样做,并且完全了解这样做的含义。
但似乎不起作用:
您能详细说明出了什么问题吗?可能只是用示例输入创建一个文件并粘贴您得到的输出?您似乎不需要在点之前使用转义符号,请使用
cgi.fix_pathinfo=0
(这是一个替换模式,而不是regex搜索模式)@Sundeep抱歉,本来可以更清楚,文件没有任何变化,它保持不变。@WiktorStribiżew从不将任何脚本用双引号括起来,除非您有特定的理由不这样做,并且完全了解这样做的含义,否则请始终使用单引号。