Ansible заменить первое вхождение в файле

Es mejor dejar la coincidencia de patrones en rsync, entonces no depende del shell y las opciones que tenga ese shell en ese momento.

Cuando lo haces:

rsync -a /some/dir/* host:/remote/dir/

entonces en realidad le está pidiendo al shell que expanda la parte /some/dir/*, de modo que rsync se ejecute así:

rsync -a /some/dir/adir /some/dir/afile /some/dir/anotherfile [etc] host:/remote/dir/

Esto suele ser bastante similar a lo que era la intención, sin embargo, no siempre como lo demuestra el hecho de que se hizo esta pregunta. Por lo tanto, es mejor ejecutar:

rsync -a /some/dir/ host:/remote/dir/

Ahora rsync (porque -aes una abreviatura de -rlptgoDque incluye -rpara recursividad )recorrerá recursivamente el directorio /some/diry sincronizará todo su contenido con /remote/diren el host remoto, incluidos los archivos de puntos directamente en /some/dir.

Como la ruta de origen termina con una barra inclinada /, los nombres de archivo transferidos omiten cualquier parte de la ubicación de origen. Si se pasó /some/dir, entonces está diciendo que sincronice explícitamente el directorio dir, incluido su nombre.Se recomienda adquirir el hábito de agregar la última barra inclinada en todo momento para evitar tal confusión, a menos que realmente comprenda lo que está sucediendo.

0
10.07.2019, 03:45
2 ответа
- name: tasks replace
  replace:
    regexp: '^(.*\.)@@(.*)$'
    replace: '\1$$\2'
0
28.01.2020, 03:27

Ответ GMaster будет соответствовать последнему вхождению в каждой строке, следующая версия использует нежадное совпадение, чтобы найти первое вхождение в строке, и жадное совпадение для остальной части файла, чтобы избежать сопоставления любых дальнейших вхождений в следующих строках.:

- name: tasks replace
  replace:
    regexp: '^(.*?\.)@@([.\n]*)$'
    replace: '\1$$\2'

Ответ основан на последней версии сообществаhttps://docs.ansible.com/ansible/latest/collections/ansible/builtin/replace_module.html

1
27.06.2021, 05:59

Теги

Похожие вопросы