如何在Bash中实现类似Python .split()的多字符分隔符分割并存入数组?
Bash 用多字符分隔符分割内容并存入数组
以下是几种可行的方案,均能将stdout内容按指定多字符分隔符分割后存入Bash数组:
方法一:借助GNU awk(推荐)
GNU awk支持将记录分隔符(RS)设为多字符串,配合readarray按空字节分割存入数组,能精准保留原内容中的换行等格式:
# 假设输入来自文件input.txt,若为stdin则替换为你的实际命令(如cat input.txt) readarray -d '' arr < <(awk -v RS='dab' '{printf "%s\x00", $0}' input.txt)
方法二:借助GNU sed
通过sed将多字符分隔符替换为空字节,再用readarray按空字节分割:
readarray -d '' arr < <(sed 's/dab/\x00/g' input.txt)
验证数组内容
可以通过循环打印数组元素确认结果:
for elem in "${arr[@]}"; do echo "=== 分割结果 ===" echo "$elem" done
说明
- 上述方法依赖Bash 4.0+(
readarray是Bash 4新增命令)及GNU工具链(GNU awk、GNU sed),主流Linux发行版均默认支持。 - 使用空字节(
\x00)作为临时分隔符,是因为它不会出现在常规文本中,能避免原内容中的特殊字符干扰分割逻辑。
内容的提问来源于stack exchange,提问作者Signor Pizza
相关产品推荐
相关产品推荐

