패턴이 나타난 후 행 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번째 줄을 인쇄합니다. 패턴이 나타난 후 사용자가 네 번째 행을 얻는 위치 - 이 값을 저장할 수 있다면 예상 값과 비교할 수 있을 것이라고 생각하고 있지만 아직 저장하는 방법을 완전히 모르겠습니다.

어떤 안내든 환영합니다!

답변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라인 매칭을 통해 인쇄합니다.

관련 정보