使用 sed 在行中插入

使用 sed 在行中插入

文件中的文本如下所示:

[homes]
        comment = Home Directories
        path = 
        browseable = 
        writable = yes
        valid users = %S
        valid users = MYDOMAIN\%S

[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes

我想要输出为:

[homes]
        comment = Home Directories
        path = /data
        browseable = yes
        writable = yes
        valid users = %S
        valid users = MYDOMAIN\%S

[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes

我正在使用这个命令:

sed -i "\#path# s#.*#& /data#" file

但它会更改路径所在文件中的所有位置

谁能帮我这个?

答案1

让你的正则表达式更加具体:

sed '/path *= *$/ s#$#/data#' file.ini

该表达式将与后跟的/path *= *$/任何行(可能被空格包围)匹配,但后面和行尾除了空格之外没有任何其他内容。实际的替换将放在该行的末尾。path=/data

这也可以工作:

sed "s#path *= *$#& /data#" file.ini

如果您需要更具体地了解要修改 INI 文件的哪一部分,请扩展命令的范围s

sed '/\[homes\]/,/\[printers\]/ s#path *= *$#& /dev#' file.ini

这只会将替换应用于该[homes]部分。

重定向到新文件或-i以适当的方式使用上述任何解决方案。

相关内容