条件が満たされると、複数のファイルを解析して行を追加するシェルスクリプトはありますか?

条件が満たされると、複数のファイルを解析して行を追加するシェルスクリプトはありますか?

私は1行だけを変更するために、複数のパラメータセクションを含む100を超えるファイルを読み取るシェルスクリプトを作成しようとしています。ファイルのセクションが含まれていない場合は、そのセクションのELLIPSOID_CODE = 123ELLIPSOID_CODE = DEFAULTに行を追加してくださいOUTPUT_PARAMETER。ファイルのセクションにそのエントリが含まれている場合は、何もしないでELLIPSOID CODE = 123ください。動作するようにシェルスクリプトを解析する際に問題があります。以下にサンプルファイルと試したコードがあります。

-----------------------------------------------------------------------   ------
NUM_RUNS = 2 

INPUT_FILE = /home/autotest
OUTPUT_PROJECTION_TYPE = BLAH
ELLIPSOID_CODE = 123
OUTPUT_PARAMETER = BLAH
OUT_FILE = /home/autotest

INPUT_FILE = /home/autotest
OUTPUT_PROJECTION_TYPE = BLAH
OUTPUT_PARAMETER = BLAH
OUT_FILE = /home/autotest

-------------------------------------------------------------------------------

#Adds in the line "ELLIPSOID_CODE = DEFAULT" before OUTPUT_PARAMETER 

dir="/home/autotest/test/"
for i in "$dir"/*;
do
    sed -i 's:OUTPUT_PARAMETER:ELLIPSOID_CODE = DEFAULT\nOUTPUT_PARAMETER:' "$i";
done

私のコードはELLIPSOID_CODE = DEFAULTとにかくすべてのセクションにその行を追加しますが、このファイルの2番目のセクションにのみその行を追加したいと思います。明確にするために、次のように見えるように努めています。

-----------------------------------------------------------------------------
NUM_RUNS = 2 

INPUT_FILE = /home/autotest
OUTPUT_PROJECTION_TYPE = BLAH
ELLIPSOID_CODE = 123
OUTPUT_PARAMETER = BLAH
OUT_FILE = /home/autotest

INPUT_FILE = /home/autotest
OUTPUT_PROJECTION_TYPE = BLAH
ELLIPSOID_CODE = DEFAULT
OUTPUT_PARAMETER = BLAH
OUT_FILE = /home/autotest

-------------------------------------------------------------------------------

ベストアンサー1

sed解決策:

sed -i '/^OUTPUT_PROJECTION_TYPE = .*/{ 
           N; s/OUTPUT_PARAMETER = .*/ELLIPSOID_CODE = DEFAULT\n&/; 
       }' /home/autotest/test/*
  • /^OUTPUT_PROJECTION_TYPE = .*/- パターンで始まる各行の場合OUTPUT_PROJECTION_TYPE = .*(ここで^正規表現アンカーは文字列/行の始まりを表します):
    • N- パターンスペースに改行文字を追加した後、パターンスペースに次の入力行を追加します。
    • s/OUTPUT_PARAMETER = .*/ELLIPSOID_CODE = DEFAULT\n&/- 次の行が欠落している場合OUTPUT_PARAMETER = .*(欠落していることを意味ELLIPSOID_CODE = ...) - 基本行の前に追加しますELLIPSOID_CODE = DEFAULT。 (&一致する文字列全体を指す)

おすすめ記事