我需要拆分 2 个或更多换行符的正则表达式模式,并将每个匹配组存储为 bash 中的数组元素。awk 和 sed 没有帮助,因为它们同时在一条线上工作。我的输入字符串包含多行文本。我怎么能那样做?
问问题
3461 次
1 回答
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
于 2013-06-03T19:50:46.183 回答