解析具有多个特殊星号字符的字符串

解析具有多个特殊星号字符的字符串

我尝试使用和等多个特殊字符来解析脚本中的输入字符串,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

相关内容