여러 개의 특수 별표 문자로 문자열을 구문 분석합니다.

여러 개의 특수 별표 문자로 문자열을 구문 분석합니다.

스크립트에서 입력 문자열을 구문 분석하려고 하는데 및 awk같은 여러 특수 문자로 인해 몇 가지 제한 사항이 발생했습니다 .***+++

그러나 동일한 스크립트를 사용 :::하거나 ---구분 기호로 사용하면 아무런 문제가 없습니다.

내 스크립트:

input=$1
delimiter=":::"

field2=$(echo "$input" | awk -F"$delimiter" '{print $2}')
field3=$(echo "$input" | awk -F"$delimiter" '{print $3}')
echo "field2=$field2"
echo "field3=$field3"

:::구분 기호로 출력 :

bash-3.2$ ./parse_options.sh ":::sub  option::: Main option, still:bla:"
field2=sub  option
field3= Main option, still:bla:

***이제 구분 기호로 사용하려고 하는데 *문자열에 다른 항목이 분리되어 있으면 불행하게도 다음과 같은 결과를 얻게 됩니다. 해당 필드는 *bla*다른 필드로 계산되며 이는 내가 원하는 것이 아닙니다.

bash-3.2$ ./parse_options.sh "***sub  option*** Main option, still*bla*"
field2=sub  option
field3= Main option, still

보시다시피 *bla*세 번째 필드에는 표시되지 않습니다. awk이 경우 설정된 구분 기호는 적용되지 않습니다.

+++구분 기호 와 마찬가지입니다 .

bash-3.2$ ./parse_options.sh "+++sub  option+++ Main option, still+bla+"
field2=sub  option
field3= Main option, still

추가 설명:

입력=***sub option*** Main option, still*bla*

예상 출력=

field2=sub  option
field3= Main option, still*bla*

답변1

#!/bin/bash

input=$1
delimiter='\\*\\*\\*'

field2=$(echo "$input" | awk -F"$delimiter" '{print $2}')
field3=$(echo "$input" | awk -F"$delimiter" '{print $3}')
echo "field2=$field2"
echo "field3=$field3"

$ ./parse_options.sh "***sub  option*** Main option, still*bla*"
field2=sub  option
field3= Main option, still*bla*


추가 자료:

답변2

*** 또는 +++를 다른 기호로 바꾼 다음 해당 기호를 구분 기호로 사용하는 것이 어떻습니까?

#!/bin/bash
input=$1

formatted_input=$(echo ${input} | sed "s/\*\*\*/\|/g;s/+++/\|/g")

field2=$(echo "${formatted_input}"  | awk -F\| '{print $2}')
field3=$(echo "${formatted_input}" | awk -F\| '{print $3}')
echo "field2=$field2"
echo "field3=$field3"

이 시도...

$ echo "***test hello***hi test msg*this***" | awk -vFS='\\*\\*\\*' '{print "Field 2 : "$2;print "Field 3 : "$3}'
Field 2 : test hello
Field 3 : hi test msg*this

관련 정보