Grep和替换特定模式下的字符串

我想以特定模式在文件中添加/替换字符串。请参考以下

"dont_search_this"   => {
    -tag => "qwerty",-abc_asd => [ "q/rg/dfg.txt",],-dependent_fcv => ["me_lib","you_lib",-vlog_opts => (($ENV{ABC_PROJECT}) eq "xuv")
      ? [ "-error=AMR","-error=GHJ","-error=TYU","-error=IJK",]
      : [],},"search_this"   => {
    -tag => "qwerty",]
      :[],

在以上数据中,我只想在search_this段落的-vlog_opts行中添加字符串“ -error = all”。修改如下

"dont_search_this"   => {
    -tag => "qwerty","-error=all" ]
      :[],

请帮助我。 使用perl也可以。

非常感谢您!

xukelongjinhong 回答:Grep和替换特定模式下的字符串

我无能为力,但认为有一种比编辑源代码更好的方法……?

将整个脚本文件读入一个字符串,然后按照线索确定要更改的地方

perl -0777 -wpe'
    s/"search_this"\s+=>\s+\{.*?\-vlog_opts\s+=>\s+[^\]]+\K/ADD_THIS/s; 
' file

(为了方便阅读而用行分隔)

注释

  • 0777 switch取消了input record separator的设置,因此整个文件被“勾画”为一条“线”

  • /s modifier使得.也匹配换行符

  • \K使得所有匹配点都被丢弃(不消耗),因此不必(捕获并)将它们输入替换部分。所以我们从字面上添加ADD_THIS

  • 关于\K的详细信息位于“ 环视断言in Extended Patterns in perlre下,但请记住,它与其他环视有细微差别

,

这看起来像一个perl数据结构。

为什么不能将"-error=all"推入$hash{search_this}{-vlog_opts}->@*

本文链接:https://www.f2er.com/3126219.html

大家都在问