0

nscd のパスワード キャッシュを無効にする行を見つけて置き換えるシェル スクリプトを作成しています。問題は、パラメーターの前と間に大量の空白があり、正規表現に関する私の限られた知識では、スペースを無視して no を yes に変更する方法を見つけることができないことです。

これは、構成ファイルに表示される行です。正しく表示されない場合に備えて、enable-cache の前に 8 個のスペース、その後に 12 個のスペース、no の前に 10 個のスペースがあります。

    enable-cache            passwd          no

私は基本的にその行だけでいいえをはいに変更する必要があります。誰にも考えはありますか?

ありがとう

グレッグ

4

2 に答える 2

1

完全な使用例を表示するには (ただし、ファイルからではなくコマンドラインで入力します):

$ sed -r -e \
     's/^([[:space:]]*enable-cache[[:space:]]+passwd[[:space:]]+)no([[:space:]]*)$/\1yes\2/' \
     <input-file >output-file \
     && mv output-file input-file

これをインプレースで行うには、edorを使用する必要がありますex(どちらも とは異なりsed -i、POSIX 固有のツールです)。

$ printf '%s\n' \
     '%s/\([[:space:]]*enable-cache[[:space:]]\+passwd[[:space:]]\+\)no[[:space:]]*/\1yes/' \
     'wq' \
    | ex file-to-modify -s -
于 2013-05-21T23:30:04.887 に答える