解析具有多個特殊星號字元的字串

解析具有多個特殊星號字元的字串

我嘗試使用和等多個特殊字元來解析腳本中的輸入字串,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

相關內容