加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如何将正则表达式的匹配指定给变量?

发布时间:2020-12-14 06:29:03 所属栏目:百科 来源:网络整理
导读:我有一个包含各种条目的文本文件.每个条目以包含所有星号的行结束. 我想使用shell命令来解析这个文件,并将每个条目分配给一个变量.我该怎么做? 以下是输入文件的示例: ***********Field1***********Lorem ipsumData to match***********More dataStill mor
我有一个包含各种条目的文本文件.每个条目以包含所有星号的行结束.

我想使用shell命令来解析这个文件,并将每个条目分配给一个变量.我该怎么做?

以下是输入文件的示例:

***********
Field1
***********
Lorem ipsum
Data to match
***********
More data
Still more data
***********

这是我的解决方案到目前为止

#!/bin/bash
for error in `python example.py | sed -n '/.*/,/^**$/p'`
do
    echo -e $error
    echo -e "n"
done

然而,这只是将匹配文本中的每个单词分配给$error,而不是整个块.

我很惊讶,没有看到一个本机的bash解决方案.是的,bash有正则表达式.您可以在线查找大量的随机文档,特别是如果在查询中包含“bash_rematch”,或者仅查看手册页.这是一个愚蠢的例子,从 here开始,稍作修改,打印整个匹配以及每个捕获的匹配,用于正则表达式.
if [[ $str =~ $regex ]]; then
    echo "$str matches"
    echo "matching substring: ${BASH_REMATCH[0]}"
    i=1
    n=${#BASH_REMATCH[*]}
    while [[ $i -lt $n ]]
    do
        echo "  capture[$i]: ${BASH_REMATCH[$i]}"
        let i++
    done
else
    echo "$str does not match"
fi

重要的一点是扩展测试[[…]]使用其正则表达式比较=?将整个匹配存储在${BASH_REMATCH [0]}中,捕获的匹配在${BASH_REMATCH [i]}中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读