Shell: 라인 형식 파일을 확인하고 파일 라인을 반복합니다.

Shell: 라인 형식 파일을 확인하고 파일 라인을 반복합니다.

2개의 애셋을 확인해야 합니다.

  1. 파일 콘텐츠 형식
  2. 이 콘텐츠를 반복합니다.

따라서 콘텐츠 파일은 다음과 같아야 합니다.

key1=value
key2=value2
...

따라서 각 줄에는 형식이 있어야 합니다 key=value. 앞이나 뒤에는 공백이 허용되지 않습니다 =. 이 파일의 내용은 env 형식 파일이어야 합니다.

반면에 루프 내에서 각 행을 a 와 a 로 분할해야 합니다 key.value

어떤 아이디어가 있나요?

답변1

배시 사용:

n=0
while IFS="=" read -r key value; do
    ((n++))
    if [[ -z $key ]]; then echo "missing key on line $n"; continue; fi
    if [[ -z $value ]]; then echo "empty value on line $n"; continue; fi
    echo "key:>$key<; value:>$value<"
done <<END
key1=value1
key2=value2
key3=
=value3
foo

key4=value4=value5=value6
END

산출

key:>key1<; value:>value1<
key:>key2<; value:>value2<
empty value on line 3
missing key on line 4
empty value on line 5
missing key on line 6
key:>key4<; value:>value4=value5=value6<

답변2

이 파일을 다음과 같이 지정하십시오 input.

key1=value1
key2=value2
key3=
=value3
key4=value4

=필드 구분자 로 사용할 수 있습니다 awk.

$ awk -F= '!($1 && $2 && NF==2) { print "File failed validation on line " NR; exit 1} { print $1, $2 }' input
key1 value1
key2 value2
File failed validation on line 3

표준 오류에 유효성 검사 오류 메시지를 표시하려면 print명령문을 수정하고, 오류가 표시된 후 처리를 계속하려면 명령문을 exit다음과 같이 변경하십시오 next.

$ awk -F= '!($1 && $2 && NF==2) { print "File failed validation on line " NR | "cat 1>&2"; next } { print $1, $2 }' input
[stdout] key1 value1
[stdout] key2 value2
[stdout] key4 value4
[stderr] File failed validation on line 3
[stderr] File failed validation on line 4

유효성 검사는 세 단계로 수행됩니다. 이러한 조건 중 하나라도 충족되지 않으면 오류가 발생하고 첫 번째 예에서는 오류 상태 종료 코드와 함께 실행이 중단됩니다.

  • $1- (입력 사양 용어로) "키"가 있는지 확인하십시오.
  • $2- (입력 사양 용어로) "값"이 있는지 확인하십시오.
  • NF==2- 앞서 언급한 "키"와 "값" 필드가 두 개만 있는지 확인하세요.

관련 정보