confファイルでいくつかの行を変更したいと思います。たとえば、ファイルには次の内容が含まれます。
local all all md5
#host all all 127.0.0.1/32 md5
#host all all ::1/128 trust
#host all all 0.0.0.0/0 md5
今、この行を「読んで」次に変更したいと思います。
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
host all all 0.0.0.0/0 md5
だから、
1) その行のコメントを解除します。
2) 持っている値(例: md5)を読み、他の場合(たとえば、信頼に)置き換えます。
md5から信頼に変更するように言うときは、ファイル内のすべてのmd5単語を意味するのではなく、変更する必要があるlocal all all md5
特定の行だけが必要です。
そのようなことは可能ですか?
行を読むコマンドがあることを知っていますが、read
比較して置き換える方法がわかりません。
答え1
私はこれがあなたが探しているものを達成すると思います。
#!/bin/bash
# Remove # signs from the beginning of lines.
sed -i -e 's/^#//' file.txt
# Replace md5 with trust on the specified lines.
sed -i -e '/local *all *all/{s/md5/trust/}' file.txt
sedが単一のコマンドで複数の式をサポートしている場合は、それを1つのコマンドに最適化することもできます。
sed -i -e '/local *all *all/{s/md5/trust/}' -e 's/^#//' file.txt
何が起こっているのかをすばやく分析します。
-i
その場でファイルを編集
-e
実行するコマンドにスクリプトを追加します。
's/^#//'
スクリプトで最初のパターンをs
変更するように指示する^#
のは私たちが検索するパターンであり、私たちはそれを何でも変更します(したがって削除します)。
これがあなただけのsed式を作成するのに役立つことを願っています。