【发布时间】:2021-03-15 23:18:27
【问题描述】:
我需要删除以下示例文件格式的记录:
record {
record {
my_id_1
my_name_1
}
record {
my_id_2
my_name_2
}
record {
my_id_3
my_name_3
}
}
在这种情况下,我们需要使用唯一值 my_id 或 my_id_2 删除所有记录数据,预期结果应该是:
record {
record {
my_id_1
my_name_1
}
record {
my_id_3
my_name_3
}
}
注意:该文件不是一个标准的谈论空格,换行等。但核心逻辑可能是删除单词record[包括相同单词]之间的所有内容,仅与my_id_*字符串相关在括号中。
到目前为止,我所能做的就是写:
sed -n '/record/{:a;N;/}/!ba; /my_id_2/p}' file.conf
事实上,它找到了我需要的东西,但我无法删除它我只打印我想要清除的行。
sed 是我的主要选择,但 python regex 也可以,因此我可以将其传递给 ansible。
##########################
这也是我的 Python 尝试
##########################
使用 python 这是我得到的最接近的:
第一次尝试:
(?=my_id_2)([^}]+)(?=\})
有匹配结果:
`my_id_2 my_name_2`
然后稍作修改:
(?=record )([^}]+)(?=\})
有匹配结果:
Match 1
`1. record { record { my_id_1 my_name_1`
Match 2
`1. record { my_id_2 my_name_2`
Match 3
`1. record { my_id_3 my_name_3`
谢谢。
【问题讨论】:
-
使用 python 这是我得到的最接近的:第一次尝试:
(?=my_id_2)([^}]+)(?=\})匹配结果:my_id_2 my_name_2然后修改了一下:(?=record )([^}]+)(?=\})匹配结果:Match 11. record { record { my_id_1 my_name_1@987654346 @1. record { my_id_2 my_name_2Match 31. record { my_id_3 my_name_3
标签: python regex linux sed scripting