我想使用定界符将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
感谢您的帮助!
答案 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