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