Добавить строку в конце строки с регулярным выражением, используя Ansible - PullRequest
1 голос
/ 13 апреля 2020

Где бы я ни находил команду tar в файле, я sh добавляю 2>/dev/null в конце той же строки.

Таким образом, если в файле /tmp/test.sh есть запись tar -cf test.tar /myfolder, его следует заменить на tar -cf test.ta /myfolder 2>/dev/null

Ниже приведена моя книга воспроизведения для того же:

 - name: Suppress tar errors
     replace:
       path: "/tmp/test.sh"
       regexp: 'tar *'
       replace: '\1 >2/dev/null'

Однако я получаю следующее сообщение об ошибке:

TASK [Suppress tar errors] **********************************************************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: sre_constants.error: invalid group reference
fatal: [10.9.9.126]: FAILED! => {"changed": false, "module_stderr": "Traceback (most recent call last):\n  File \"<stdin>\", line 102, in <module>\n  File \"<stdin>\", line 94, in _ansiballz_main\n  File \"<stdin>\", line 40, in invoke_module\n  File \"/usr/lib64/python2.7/runpy.py\", line 176, in run_module\n    fname, loader, pkg_name)\n  File \"/usr/lib64/python2.7/runpy.py\", line 82, in _run_module_code\n    mod_name, mod_fname, mod_loader, pkg_name)\n  File \"/usr/lib64/python2.7/runpy.py\", line 72, in _run_code\n    exec code in run_globals\n  File \"/tmp/ansible_replace_payload_FUlN7y/ansible_replace_payload.zip/ansible/modules/files/replace.py\", line 302, in <module>\n  File \"/tmp/ansible_replace_payload_FUlN7y/ansible_replace_payload.zip/ansible/modules/files/replace.py\", line 272, in main\n  File \"/usr/lib64/python2.7/re.py\", line 162, in subn\n    return _compile(pattern, flags).subn(repl, string, count)\n  File \"/usr/lib64/python2.7/re.py\", line 275, in filter\n    return sre_parse.expand_template(template, match)\n  File \"/usr/lib64/python2.7/sre_parse.py\", line 802, in expand_template\n    raise error, \"invalid group reference\"\nsre_constants.error: invalid group reference\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}

Я даже попробовал следующее:

   replace: '\g\1 >2/dev/null'
   replace: '\g<1> >2/dev/null'
   replace: '\1 >2/dev/null'

Но ни один из них не помог.

1 Ответ

1 голос
/ 13 апреля 2020

Ошибка: sre_constants.error: неверная ссылка на группу

Вы не определили ни одной группы в regexp, но replace ищет первую группу захвата \1.

Определить группы в парантезе (), регулярное выражение должно быть '(tar.+)'

И задача будет выглядеть так:

- name: Suppress tar errors
  replace:
    path: "/tmp/test.sh"
    regexp: '(tar.+)'
    replace: '\1 >2/dev/null'
...