Bash:拆分分隔符但保留分隔符
Bash: split on delimiter but keep the delimiter
我想使用定界符将字符串拆分为数组并保留这些定界符。
我尝试使用 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
感谢您的帮助!
您可以使用 grep
和 -o
选项:
grep -oE '[^][^./(){};:,"]+|[][^./(){};:,"]' <<< "$ligne"
this
.
is
/
just
(
an
]
example
正在使用的正则表达式是基于 2 个交替的交替:
[^][^./(){};:,"]+
:匹配1+个不在字符class 中的任意字符
|
: 或
[][^./(){};:,"]
:匹配字符class 中的任意字符
据我所知,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
我想使用定界符将字符串拆分为数组并保留这些定界符。 我尝试使用 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
感谢您的帮助!
您可以使用 grep
和 -o
选项:
grep -oE '[^][^./(){};:,"]+|[][^./(){};:,"]' <<< "$ligne"
this
.
is
/
just
(
an
]
example
正在使用的正则表达式是基于 2 个交替的交替:
[^][^./(){};:,"]+
:匹配1+个不在字符class 中的任意字符
|
: 或[][^./(){};:,"]
:匹配字符class 中的任意字符
据我所知,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