regex - Bash 中的多个多行正则表达式匹配

标签 regex bash

我正在尝试在 bash 脚本中进行一些相当简单的字符串解析。 基本上,我有一个由多个多行 字段组成的文件。每个字段都被已知的页眉和页脚包围。

我想将每个字段分别提取到一个数组或类似的数组中,就像这样

>FILE=`cat file`
>REGEX="@#@#@#[\s\S]+?@#@#@"
> 
>if [[$FILE =~ $REGEX ]] then
>   echo $BASH_REMATCH
>fi

文件:

@#@#@#################################
this is field one
@#@#@#
@#@#@#################################
this is field two
they can be any number of lines
@#@#@#

现在我很确定问题是 bash 不匹配带有“.”的换行符

我可以用“pcregrep -M”匹配这个,当然整个文件都会匹配。我可以一次从 pcregrep 获得一场比赛吗?

我不反对使用一些内联 perl 或类似的东西。

最佳答案

如果你有gawk

awk 'BEGIN{ RS="@#*#" }
NF{
    gsub("\n"," ") #remove this is you want to retain new lines
    print "-->"$0 
    # put to array
    arr[++d]=$0
} ' file

输出

$ ./shell.sh
--> this is field one
--> this is field two they can be any number of lines

关于regex - Bash 中的多个多行正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118121/

相关文章:

python - 正则表达式:删除点之前长度为 1-3 的字母

html - 需要一些 HTML 正则表达式帮助(是的,我知道这是不应该完成的)

file - 在 bash 中查找平面目录中不存在于另一个目录树中的所有文件

python - md5sum 输出和 Python hashlib 输出有什么区别?

linux - Ubuntu Shell 脚本问题 : convert output of command into variable

regex - 电话号码的自定义 html5 验证正则表达式

javascript - 用换行符和制表符替换 tr 和 td 的单个正则表达式

regex - 按相似词分组

bash - 将 bash 数组扩展为花括号语法

python - 命令 "python --verson"使用 "awk"提取版本号