공백 문자와 일치하는 텍스트를 구문 분석하는 Bash 스크립트 문제

공백 문자와 일치하는 텍스트를 구문 분석하는 Bash 스크립트 문제

다음과 유사한 감사 명령 목록이 있습니다.

1. -a *policy name=PolicyName -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S
2. -a *policy name=PolicyName -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S
3. -a *policy name=Policy Name -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S

name=Value변수를 . 이것은 표준 모드이므로 읽기를 성공적으로 사용했지만 공백이 있는 줄(3번째 줄 참조)에 도달하면 모든 변수가 오프셋됩니다. 줄의 각 단어를 반복하고 특정 패턴을 일치시키지 않고 이 문제를 해결하는 방법을 잘 모르겠습니다. 누군가가 더 나은 해결책을 갖기를 바랍니다.

답변1

배열 변수를 사용 하면 bash다음을 수행할 수 있습니다.

{ IFS=$'\n'; array=($(grep -Po 'name=[^-]+(?=\s*-)' infile)); }

그런 다음 배열의 요소를 인쇄합니다(Bash의 배열 인덱싱은 0부터 시작합니다).

printf '%s\n' "${array[@]}"
name=PolicyName
name=PolicyWorkflow
name=PolicyAction
name=PolicyName
name=PolicyWorkflow
name=PolicyAction
name=Policy Name
name=PolicyWorkflow
name=PolicyAction

아니면 단일 요소만 인쇄합니다.

printf '%s\n' "${array[6]}"
name=Policy Name
  • 우리는 정의한다IFS" \newline" 문자 IFS=$'\n'단어 분리\n결과의 "ewline" 문자에만 발생합니다.인용되지 않음명령 대체$(...).

  • 구문이 알려져 있음{ list; }그룹화 명령나는 명령을 그룹화하는 데 익숙합니다.

  • array=(...)구문은 관련 항목을 만드는 데 사용됩니다.대량으로변수 이름은 입니다 array.

  • 를 사용하면 패턴과 일치하는 일치 항목만 인쇄합니다 grep -Po 'name=[^-]+(?=\s*-)' infile.-o"name="하이픈을 제외하고 길이가 0이 아닌 문자가 오고 그 [^-]+뒤에는 하이픈까지 0개 이상의 공백이 옵니다 (?=\s*-).


앞으로 읽을 내용:

관련 정보