ANSIBLE:拆分函数未从字符串中删除 '\r' 回车 return
ANSIBLE: Split function not removing the '\r' carriage return from string
我有一个名为 file-names.txt 的本地 txt 文件,其中包含文件名列表
file1.txt
file2.txt
file3.txt
在我的 ansible-playbook 中,我正在使用 slurp 模块注册 file-name.txt 的文件内容。
并设置一个名为 files_names
.
的事实
tasks:
- name: Getting the file
ansible.builtin.slurp:
src: file-name.txt
register: file_names
- name: Saving the file names
set_fact:
file_name_list: "{{ (file_name['content] | b64decode | trim ).split('\r\n') }}"
我希望 file_name_list
事实是一个仅包含文件名的列表。但是有些 split 函数无法从文件名中删除 '\r'
,我得到以下结果
ok: [localhost] => {
"ansible_facts":{
"file_name_list": [
"file1.txt\r",
"file2.txt\r",
"file3.txt"
]
},
"changed": false
}
如何从数组的每个元素中删除回车 return '\r'
以便 file_name_list
看起来像
ok: [localhost] => {
"ansible_facts":{
"file_name_list": [
"file1.txt",
"file2.txt",
"file3.txt"
]
},
"changed": false
}
PS: file-name.txt 是在 Windows 机器上制作的,这就是为什么每行中包含一个回车符 return。
所以 trim
过滤器似乎从 file3.txt
上的文件列表中删除了最后一个 \r
。因此,我们可以在使用 \r
.
拆分文件名后,而不是在拆分前使用 trim
,每个 item
trim
像下面这样的东西应该可以解决问题:
- name: saving the file names
set_fact:
filename_list: "{{ filename_list|default([]) + [ item|trim ] }}"
with_items: "{{ (filenames.content|b64decode).split('\r') }}"
- name: show the filenames
debug:
var: filename_list
这应该产生:
ok: [localhost] => {
"filename_list": [
"file1.txt",
"file2.txt",
"file3.txt"
]
}
"{{ some_string| regex_replace('[\r\n]+','\n') }}"
我有一个名为 file-names.txt 的本地 txt 文件,其中包含文件名列表
file1.txt
file2.txt
file3.txt
在我的 ansible-playbook 中,我正在使用 slurp 模块注册 file-name.txt 的文件内容。
并设置一个名为 files_names
.
tasks:
- name: Getting the file
ansible.builtin.slurp:
src: file-name.txt
register: file_names
- name: Saving the file names
set_fact:
file_name_list: "{{ (file_name['content] | b64decode | trim ).split('\r\n') }}"
我希望 file_name_list
事实是一个仅包含文件名的列表。但是有些 split 函数无法从文件名中删除 '\r'
,我得到以下结果
ok: [localhost] => {
"ansible_facts":{
"file_name_list": [
"file1.txt\r",
"file2.txt\r",
"file3.txt"
]
},
"changed": false
}
如何从数组的每个元素中删除回车 return '\r'
以便 file_name_list
看起来像
ok: [localhost] => {
"ansible_facts":{
"file_name_list": [
"file1.txt",
"file2.txt",
"file3.txt"
]
},
"changed": false
}
PS: file-name.txt 是在 Windows 机器上制作的,这就是为什么每行中包含一个回车符 return。
所以 trim
过滤器似乎从 file3.txt
上的文件列表中删除了最后一个 \r
。因此,我们可以在使用 \r
.
trim
,每个 item
trim
像下面这样的东西应该可以解决问题:
- name: saving the file names
set_fact:
filename_list: "{{ filename_list|default([]) + [ item|trim ] }}"
with_items: "{{ (filenames.content|b64decode).split('\r') }}"
- name: show the filenames
debug:
var: filename_list
这应该产生:
ok: [localhost] => {
"filename_list": [
"file1.txt",
"file2.txt",
"file3.txt"
]
}
"{{ some_string| regex_replace('[\r\n]+','\n') }}"