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上記のソリューションのいずれかを適切な方法で使用してください。

おすすめ記事