など、いくつかの特殊文字を使用してスクリプト内の入力文字列を解析しようとしていますが、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*
3番目のフィールドには表示されません。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