ansible - 替换现有行中的字符串或单词而不替换所有行

时间:2017-04-20 08:44:59

标签: regex ansible

我想在passwd中仅替换jenkins用户的主目录,我猜lineinfile对此不好,因为它将替换所有行,我需要保留用户ID和组ID,例如:

当前行:jenkins:x:1002:1002::/home/jenkins:/bin/bash

更改为:jenkins:x:1002:1002::/var/lib/jenkins:/bin/bash

  

/ home / jenkins - >的/ var / lib中/詹金斯

- name: Set the Jenkins home directory in passwd
  lineinfile:
    dest: /etc/passwd
    regexp: '^jenkins=.*'
    line: '?'
  register: jenkins_passwd
  notify: restart jenkins

2 个答案:

答案 0 :(得分:2)

匹配

php.ini

替换为

^(jenkins:.:\d+:\d+::)[^:]*

这匹配正确格式化的\1/var/lib/jenkins 行到其主目录的开头。我们希望保留的信息分组在一个捕获组中,该组在当前主目录定义之前停止。要替换,我们引用该组然后添加新的主目录定义。该行的结尾保持不变。

答案 1 :(得分:0)

匹配

  

:: *詹金斯

替换为

  

::的/ var / lib中/詹金斯