我想只检查字符串,而不是整行。例如,我的行就像这样
"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
,它只会被替换,但如果没有,则不会添加。那么任何其他功能来满足我的条件吗?
答案 0 :(得分:1)
一种方法是使用正则表达式(未经测试):
- name: If lcredit is specified, make sure it is -1
lineinfile:
regexp: "^pwd requisite(.*) lcredit=(-?\d+)(.*)"
backrefs: yes
line: 'pwd requisite\1 lcredit=-1\2'
dest: /etc/pam.d/whatever
- name: If lcredit not specified, add it
lineinfile:
regexp: "^pwd requisite((?!.* lcredit=.*).*)"
backrefs: yes
line: 'pwd requisite\1 lcredit=-1'
dest: /etc/pam.d/whatever
通常我会尽量避免使用正则表达式,特别是上面那些复杂的表达式。如果您还不了解它们,那么投资学习它们通常是不值得的。所以我会做的是尝试找到解决问题的方法。例如,它是否能够始终指定整个确切的线,而不是试图通过移动其部分来变得聪明?