여러 특수 별표 문자가 포함된 문자열 구문 분석

여러 특수 별표 문자가 포함된 문자열 구문 분석

및 같은 여러 특수 문자를 사용하여 스크립트에서 입력 문자열을 구문 분석하려고 하는데 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

관련 정보