使用ansible只检查字符串
Check only string using ansible
我只想检查字符串,而不是整行。比如我的行是这样的
"pwd requisite dcredit=-5 ucredit=-1 lcredit=-1 ocredit=-1 minlen=14 difok=4 retry=2"
我必须检查 lcredit=-1
这个字符串
条件是:
如果这个字符串和这个一样lcredit=-1
我们跳过这个
如果字符串lcredit=2
不在-1
那么这里就要改成-1
如果字符串不存在必须在行尾添加字符串。
还有一个 lcredit=-1
包含该特定行中的任何位置。
如果我使用 lineinfile
它将改变整行并且行字符串位置不同。如果我使用replace
,它只会被替换,但如果不存在则不会添加。那么还有其他功能可以满足我的条件吗?
一种方法是使用正则表达式(未经测试):
- name: If lcredit is specified, make sure it is -1
lineinfile:
regexp: "^pwd requisite(.*) lcredit=(-?\d+)(.*)"
backrefs: yes
line: 'pwd requisite lcredit=-1'
dest: /etc/pam.d/whatever
- name: If lcredit not specified, add it
lineinfile:
regexp: "^pwd requisite((?!.* lcredit=.*).*)"
backrefs: yes
line: 'pwd requisite lcredit=-1'
dest: /etc/pam.d/whatever
通常我尽量避免使用正则表达式,尤其是像上面这样复杂的表达式。如果您还不了解它们,那么投入学习它们通常是不划算的。所以我要做的是尝试找到解决问题的方法。例如,是否始终指定整条确切的行,而不是尝试巧妙地移动其部分?
我只想检查字符串,而不是整行。比如我的行是这样的
"pwd requisite dcredit=-5 ucredit=-1 lcredit=-1 ocredit=-1 minlen=14 difok=4 retry=2"
我必须检查 lcredit=-1
这个字符串
条件是:
如果这个字符串和这个一样
lcredit=-1
我们跳过这个如果字符串
lcredit=2
不在-1
那么这里就要改成-1
如果字符串不存在必须在行尾添加字符串。
还有一个 lcredit=-1
包含该特定行中的任何位置。
如果我使用 lineinfile
它将改变整行并且行字符串位置不同。如果我使用replace
,它只会被替换,但如果不存在则不会添加。那么还有其他功能可以满足我的条件吗?
一种方法是使用正则表达式(未经测试):
- name: If lcredit is specified, make sure it is -1
lineinfile:
regexp: "^pwd requisite(.*) lcredit=(-?\d+)(.*)"
backrefs: yes
line: 'pwd requisite lcredit=-1'
dest: /etc/pam.d/whatever
- name: If lcredit not specified, add it
lineinfile:
regexp: "^pwd requisite((?!.* lcredit=.*).*)"
backrefs: yes
line: 'pwd requisite lcredit=-1'
dest: /etc/pam.d/whatever
通常我尽量避免使用正则表达式,尤其是像上面这样复杂的表达式。如果您还不了解它们,那么投入学习它们通常是不划算的。所以我要做的是尝试找到解决问题的方法。例如,是否始终指定整条确切的行,而不是尝试巧妙地移动其部分?