在bash中拆分多个换行符

时间:2013-06-03 12:47:48

标签: string bash split newline multiline

我需要拆分2个或更多新行的正则表达式模式,并将每个匹配组作为数组的元素存储在bash中。 awk和sed没有帮助,因为他们同时在一条线上工作。我的输入字符串包含多行文本。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

解决方案。下面使用的选项卡可以替换为文件中未包含的其他字符。

str=$(cat newlines.dat)                 # read file into string

str=${str//$'\n'$'\n'/$'\t'}            # 2 newlines to 1 tab

while [[ "$str" =~ $'\t'$'\n' ]] ; do
  str=${str//$'\t'$'\n'/$'\t'}          # eat up further newlines
done

str=${str//$'\t'$'\t'/$'\t'}            # sqeeze tabs

IFS=$'\t'                               # field separator is now tab
result=( $str )                         # slit into array

cnt=0
for x in ${result[@]}; do               # print result
  ((cnt++))
  echo -e "--- group $cnt ---\n$x"
done

输入文件:

1111111111
222222222

33333333333
44444444444


5555555555555



66666666666666
77777777


888888888888888
999999

结果:

--- group 1 ---
1111111111
222222222
--- group 2 ---
33333333333
44444444444
--- group 3 ---
5555555555555
--- group 4 ---
66666666666666
77777777
--- group 5 ---
888888888888888
999999