重击:在定界符上分割但保留定界符

时间:2018-09-21 14:14:14

标签: bash split delimiter ifs

我想使用定界符将String拆分为数组,并保留这些定界符。 我尝试使用IFS,但它重新定义了定界符。

例如:

ligne="this.is/just(an]example"
IFS='}|//|)|(| |{|[|]|.|;|/"|,' read -ra ADDR <<< "$ligne"
for i in "${ADDR[@]}"; do
   echo $i
done

我希望结果是这样的:

this
.
is
/
just
(
an
]
example

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以将grep-o选项一起使用:

grep -oE '[^][^./(){};:,"]+|[][^./(){};:,"]' <<< "$ligne"

this
.
is
/
just
(
an
]
example

使用的正则表达式是基于2个交替的交替:

  • [^][^./(){};:,"]+:匹配不在字符类中的任何字符的1 +。
  • |:或
  • [][^./(){};:,"]:匹配字符类中的任何字符

答案 1 :(得分:0)

据我所知,使用Bash内置函数并没有解决这个问题的小方法,但是如果您需要这样做,则可以执行以下操作。

ligne="this.is/just(an]example"
array=()
while true; do
    for delim in '}' '//' ')' '(' ' ' '{' '[' ']' '.' ';' '/"' ','; do
        frag=${ligne#*"$delim"}
        [ "$frag" = "$ligne" ] || break
    done
    [ "$frag = "$ligne" ] && break
    head=${ligne%"$frag"}
    array+=("${head%"$delim"}" "$delim")
    ligne=$frag
done