Perl 单行正则表达式不能正确替换 - returns 错误
Perl one-liner regex doesn't substitute correctly - returns error
这可能是显而易见的事情,但我不得不问一下,因为我没有看到它。
我正在尝试在此文本文件中进行以下替换。我想要这个:
bind_password = 'grafana'
变成这样:
bind_password = ''
我已尝试在包含以下行的文件中使用以下正则表达式一行:
$ perl -0pe 's/(bind_password = \')grafana\'/\'/g' file.txt
bash: syntax error near unexpected token `)'
当我在 regex101 上尝试正则表达式时,它运行良好:https://regex101.com/r/0fb4Pu/1。区别在于我不得不转义单引号。我试过在正则表达式周围使用双引号而不是单引号,如:
perl -0pe "s/(bind_password = ')grafana'/'/g" file.txt
虽然这不是 return 错误,但它并不符合我的要求。它用单个冒号代替字符串,如下所示:
'
我做错了什么?
您可以使用
perl -i -pe "s/bind_password = '\Kgrafana(?=')//" file.txt
详情:
-i
- 修改文件内容
bind_password = '\K
- 匹配 bind_password = '
并从匹配值中删除此文本(以便它在文件中保持完整)
grafana
- 你的grafana
字
(?=')
- 后跟 '
(但 '
未被消耗,因此它完整地保留在文件中)
注:
- 您不需要
-0pe
中的 0
,因为您的匹配没有跨越多行
- 转义单引号不是这样工作的,在表达式周围使用双引号更简单,尽管有时连接是唯一的方法
- 您不需要
g
标志,因为此 perl
逐行工作,并处理所有行(当每行有多个匹配项时,g
是必需的).
这可能是显而易见的事情,但我不得不问一下,因为我没有看到它。
我正在尝试在此文本文件中进行以下替换。我想要这个:
bind_password = 'grafana'
变成这样:
bind_password = ''
我已尝试在包含以下行的文件中使用以下正则表达式一行:
$ perl -0pe 's/(bind_password = \')grafana\'/\'/g' file.txt
bash: syntax error near unexpected token `)'
当我在 regex101 上尝试正则表达式时,它运行良好:https://regex101.com/r/0fb4Pu/1。区别在于我不得不转义单引号。我试过在正则表达式周围使用双引号而不是单引号,如:
perl -0pe "s/(bind_password = ')grafana'/'/g" file.txt
虽然这不是 return 错误,但它并不符合我的要求。它用单个冒号代替字符串,如下所示:
'
我做错了什么?
您可以使用
perl -i -pe "s/bind_password = '\Kgrafana(?=')//" file.txt
详情:
-i
- 修改文件内容bind_password = '\K
- 匹配bind_password = '
并从匹配值中删除此文本(以便它在文件中保持完整)grafana
- 你的grafana
字(?=')
- 后跟'
(但'
未被消耗,因此它完整地保留在文件中)
注:
- 您不需要
-0pe
中的0
,因为您的匹配没有跨越多行 - 转义单引号不是这样工作的,在表达式周围使用双引号更简单,尽管有时连接是唯一的方法
- 您不需要
g
标志,因为此perl
逐行工作,并处理所有行(当每行有多个匹配项时,g
是必需的).