人が維持する次のJavaプロパティファイルがあります。
# file.input = /very/old/name
# file.input = /old/name
file.input = /current/name
file.input.default = /default/name
other.file.input = /current/other/name
# Other comments
other.properties = must stay the same
他のファイルに触れることなくこのファイルを編集するには、スクリプトを作成する必要があります。したがって、構成ファイルに新しい属性をダンプすることはできません。
多くの場合、人々は後で使用するために1行をコピー/貼り付けてコメントを付けます。私のアプリケーションは、コメントに触れることなく設定ファイルを具体的に編集する必要があります。
この特別な場合は、コメント行に触れることなく他のプロパティ(、、)に触れることなくfile.input
値をに設定するように行を編集したいと思います。私のスクリプトは、人間が通常やっているように、歴史的目的のために現在の行を維持しません。また、keyに設定されている現在の値がわかりません。/new/name
file.input.default
other.file.input
file.input
私はどこに閉じ込められていますか?最初は。私はBashの専門家ではなく、コマンドを順番に呼び出し、時にはいくつかのifを使用する以外はほとんど使用しません。しかし、それはすべてです。
perl
正規表現を使用できますが、このシステムにはPerlがインストールされていないようです。それで、順番に順番に振り返りますが、sed
何の結果も得られません。特定の値を他の値にのみ置き換えることができるようです。ファイルの読み取りでラップし、変更できる意図した行を除いて書き換えることができます。しかも変えたい家の前に人為的に追加された空間も到底余裕がなかった。
したがって、他のオプションがある場合は共有してください。私が遠ざかり始めたからです。
ベストアンサー1
sed
-iオプションを使用します(所定の位置で編集)。警告は、置換コマンドを区切るために使用される文字がNEW文字列には表示されないことです。この例では、 '/'の代わりに ':'を使用して(s:old_string:new_string:
)を区切ります。
NEW=/new/name
sed -i 's:^[ \t]*file.input[ \t]*=\([ \t]*.*\)$:file.input = '${NEW}':' f