文件中的文本如下所示:
[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
以适当的方式使用上述任何解决方案。