パターンが表示された後、行4の値を検証します。

パターンが表示された後、行4の値を検証します。

検証が必要なテキストファイルがあり、期待値が存在するかどうかを確認する方法を見つけようとしています。

私のファイルの例は次のとおりです。

InitialPattern:
   Value1=somevalue
   Value2=somevalue
   Value3=somevalue
   InstallationName=InstallationX

2〜4行目は関係ありませんが、5行目でこれを確認する必要があります。

   InstallationName=Installation1

しかし、この線は常に存在するわけではなく、この時点でパターンが再開されます。

InitialPattern:

これまでに行った操作は、その行がまったく表示されない場合を除いて機能します。

      instName="Installation1"
      installationNames=$(cat file.txt | grep InstallationName)
      IFS=$'\n' read -rd '' -a array <<< "$installationNames"
      for element in "${array[@]}"
      do
         if [[ "$element" =~ "$instName" ]]; then
           test="pass"
         else
           test="fail"
           break
         fi
      done

どんなアイデアがありますか?私はこの投稿を見ています:一致する行と一致する行内のn行目を印刷します。 パターンが表示された後、ユーザーが4行目を取得する場所 - この値を保存できる場合は、予想値と比較できると思いますが、まだ保存する方法がわかりません。

どんな案内でも歓迎します!

答え1

test=$(
    sed '
        /InitialPattern:/! d
        n
        n
        n
        $!n
        /.*Installation[0-9]\+$/d
        s/.*/FAIL/p
        q
        ' file.txt)
test=${test:-PASS}

答え2

sed -e'/\n/D;t'       -e:N  \
    -e'/^InitialPattern/ N' \
    -e'/\nInitialPattern/D' \
    -e's/\n/&/4;tD'         \
    -e'$!s//&/; tN'   -e:D  \
    -e's/ *\(\(Installation\)Name=\2[X0-9]\{1,\}\) *$/\1/;D'

何をしたいのかわかりませんが、これはあなたの仕様と一致する順序の最後の行だけを印刷します。

ここで。非常に重要な記事を書いた。したがって4、必要に応じて必要に応じて変更できます。入力する数字は、最新の改行の間になければならない改行の数です。InitialPattern一致Installationラインマッチングで印刷します。

関連情報