次のように構成ファイルを変更するためのスクリプトを作成しています。
[purple]
auth = no
enabled = 0
username =
password =
priority = 0
host = True
[shovel]
group =
manual = False
enabled = 0
username =
これには多くの[カテゴリ]があり、時にはキー/値ペアと同じキーが含まれます。
"enabled = 0"の値を "enabled = 1"に変更するawk/sed/grep/tr/cut/perlを使用して1行のコードを作成できますか?ただし、カテゴリ[shovel]に対してのみ可能ですか?
ベストアンサー1
範囲を使用sed
できます(カテゴリの末尾の空白行で停止[shovel]
)。
sed '/\[shovel\]/,/^$/ s/enabled = 0/enabled = 1/' file
最初の部分は、/\[shovel\]/,/^$/
を使用して行を検索し[shovel]
、空の行が見つかるまで続行し、そのs/old/new
部分(この場合は単純な部分)でのみ次のコマンドを実行することを意味します。file
コメントへの応答注:sed
範囲とアドレスの代替区切り文字は、前にバックスラッシュがない限り許可されません(したがって、/
一致する必要がある場合はリテラルである必要があるすべての文字をエスケープしてください)。次のコマンドでは、いつでも代替区切り文字を使用できます。たとえば、次のようになります。
sed '/\[shovel\]/,/^$/ s|enabled = 0|enabled = 1|' file
または
sed '\|\[shovel\]|, |^$| s|enabled = 0|enabled = 1|' file