ファイルのテキストは次のとおりです。
[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
上記のソリューションのいずれかを適切な方法で使用してください。