스크립트에서 입력 문자열을 구문 분석하려고 하는데 및 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