如何将字符串按字符串(多字符)分隔符拆分为数组?

如何将字符串按字符串(多字符)分隔符拆分为数组?

基本上我想通过字符串分隔符将字符串拆分为数组,例如sep.。是否有本地方法可以在不使用、bash等工具的情况下执行此操作?我知道我可以通过设置和使用将字符串拆分为数组,但这不适用于字符串分隔符。如果没有,您将如何使用 、 等工具来做到这一点?sedawkIFSread -rasedawk

假设我有一个字符串This is some sep.string,我想将其拆分为一个包含 2 个元素的数组:This is somestring

答案1

您可以使用参数扩展手动迭代变量:

#!/bin/bash
var='This is some sep.string
with
newlines
sep.another line'

a=()
while [[ $var =~ sep\. ]]
do
  e=${var%%sep.*}
  a+=("${e}")
  var=${var#${e}sep.}
done
a+=("${var}")

这会循环遍历变量(在此过程中更新它),向前剥离第一个分隔符(%%查找最长的匹配项,因此这将从字符串末尾向后跟踪,直到第一个实例sep.);它将余数添加到数组中,然后从变量的前面删除余数和分隔符。迭代直到变量不再包含分隔符,然后将剩余部分添加到数组中。

答案2

有点像使用参数扩展和 readarray 来完成此操作的本机方法

string='This is some sep.string'
mapfile -t array < <( echo "${string//sep./$'\n'}" )

${string//sep./$'\n'}sep.- 将用换行符 替换出现的。 mapfile/readarray将创建一个数组,其中每一行都有其自己的元素。

相关内容