スクリプトを使用したファイルの改行

スクリプトを使用したファイルの改行

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式を作成するのに役立つことを願っています。

おすすめ記事