Grep и заменить строку в конкретном шаблоне - PullRequest
0 голосов
/ 11 ноября 2019

Я хочу добавить / заменить строку в файле с определенным шаблоном. Пожалуйста, обратитесь ниже

"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",
    -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", ]
      :[],
},

В приведенных выше данных я хочу добавить строку "-error = all" в строку -vlog_opts только в search_this абзаце. Изменение должно быть следующим:

"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",
    -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", "-error=all" ]
      :[],
},

Пожалуйста, помогите мне в этом. Использование perl также хорошо.

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 11 ноября 2019

Я не могу с этим поделать, но думаю, что должен быть лучший способ, чем редактирование исходного кода ...?

Прочитать весь файл сценария в строку и затем следовать по пути, чтобы определитьместо для изменения

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

(зачеркнуто для удобства чтения)

Примечания

  • 0777 Переключатель отменяет сброс входной разделитель записей , поэтому файл «выгравирован» целиком как одна «строка»

  • , модификатор /s делает его таким, чтобы. соответствует также новой строке

  • \K делает так, что все совпадения до этой точки отбрасываются (не расходуются), поэтому их не нужно (захватывается)а) введен в запасную часть. Таким образом, мы буквально добавляем ADD_THIS

  • Хорошая информация о \K находится в разделе " Lookaround Assertions " в Extended Patterns в perlre , но сохраняемИмейте в виду, что он слегка отличается от других взглядов

0 голосов
/ 11 ноября 2019

Это похоже на структуру данных perl.

Любая причина, почему нельзя просто вставить "-error=all" в $hash{search_this}{-vlog_opts}->@*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...