유효성 검사가 필요한 텍스트 파일이 있고 예상 값이 존재하는지 확인하는 방법을 찾으려고 합니다.
내 파일의 예는 다음과 같습니다.
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
라인 매칭을 통해 인쇄합니다.