我如何查找 属性 如果它没有评论那么我更新它,如果它评论然后取消评论,如果没有找到,然后写它

How do I look for a property and if its not commented then I update it, if its commented then uncomment, if not found, then write it

我想通过 bash 脚本在文件中搜索 property,如果找到它并且如果它被评论,那么我想取消它的评论并想更新它的值(之后的内容= 符号)到​​ /path/to/file。如果它没有注释并且值已经是 /path/to/file,那么什么都不做。没找到就写。

以下是一些示例输入:

property= /path/to/file

property = /path/to/file

#property = /path/to/file

##property=/path/to/file

输出:

property = /path/to/file

这是我目前所拥有的,但它并不完全有效:

sed 's/#\?property *=.*/property=/path/to/file/'

使用您显示的示例,使用 sed 尝试以下操作:

sed  -E '/^#+property/s/^#+//;/^property/ { /^property\s+=\s+\/path\/to\/file/! s/=.*/= \/path\/to\/file/}' /path/to/Input_file

解释:只需启用sed-E选项即可启用ERE(扩展正则表达式)然后-i 将在 Input_file 中进行就地更新。使用命令 /^#+property/ 检查行是否以 #(出现 1 次或多次)开头,然后是 属性 然后将其替换为 s/^#+(部分代码) // NULL in Input_file.然后检查第二个条件,如果行以 property 开头并且其中没有 /path/to/file 值,然后简单地用该行中的 = /path/to/file 替换从 = 到最后的所有内容。

上面没有 -i 选项,如果您对终端上显示的结果感到满意,请在上面的命令中使用 sed -i