如何將字串按字串(多字元)分隔符號拆分為數組?

如何將字串按字串(多字元)分隔符號拆分為數組?

基本上我想透過字串分隔符號將字串拆分為數組,例如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將建立一個數組,其中每一行都有其自己的元素。

相關內容