複数の特殊アスタリスク文字を含む文字列の解析

複数の特殊アスタリスク文字を含む文字列の解析

など、いくつかの特殊文字を使用してスクリプト内の入力文字列を解析しようとしていますが、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

関連情報