【问题标题】:Bash: split a (multiline) string into array with a multichar delimiterBash:使用多字符分隔符将(多行)字符串拆分为数组
【发布时间】:2017-02-28 09:33:18
【问题描述】:

我有以下文件并调用cat myfile | ./myscript.sh

(Item)
(Values)
blabla
blabla
(StopValues)
(Item)
(Values)
hello
hello
(StopValues)

在我的脚本中,我将管道内容从 cat 保存到一个变量:s=$(cat)

我怎样才能将这个字符串拆分为(在这个例子的上下文中)一个包含 2 个变量的数组,一个说

(Item)
(Values)
blabla
blabla
(StopValues)

另一个说法

(Item)
(Values)
hello
hello
(StopValues)

【问题讨论】:

  • 不是完全重复的,因为你没有提到任何关于数组的东西,但我的这个问题的答案可能会给你一些想法:stackoverflow.com/questions/14630940/…
  • @user000001 除了一般的混乱之外,我看到的是,在他的字符串中,他总是有他想要删除的字符(可以用作分隔符,例如 '======= '或 '/') 我没有任何应该从我的字符串中删除的内容

标签: string bash


【解决方案1】:

假设源字符串在变量s中,下面的bash脚本会根据需要填充数组变量a

a=()
i=0
while read -r line
do
  a[i]="${a[i]}${line}"$'\n'
  if [ "$line" == "(StopValues)" ]
  then
    let ++i
  fi
done <<< "$s"

【讨论】:

  • 数组的一个元素只包含一行,例如“blabla”,我宁愿想要一个元素中的“整个部分”,就像问题中描述的那样
  • @RandomDisplayName 是尝试运行代码还是判断不运行?
  • 我试过了,虽然这可能会导致这种情况发生,但我有一个文件中的内容并将其传送到我的脚本,我更新了我的问题
  • 没关系,这是我的错,当我像 echo ${a[0]} 这样回显我的数组时,它完全没问题,但是当我使用 for each 循环遍历它时,该项目总是只有一个 word\n 是有一种方法可以像回显${a[0]} 一样获得完整的输出?
  • @RandomDisplayName 您必须引用您的变量扩展:for x in "${a[@]}"; do ... done
猜你喜欢
  • 2019-03-15
  • 2016-01-02
  • 2011-12-26
  • 2018-05-01
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 2020-05-08
  • 2011-11-26
相关资源
最近更新 更多