regex - Bash 正则表达式字符串变量匹配

标签 regex bash perl

我有以下用 perl 编写的脚本,运行良好。但我正在尝试使用 bash 实现同样的目标。

#!/usr/bin/perl

use 5.010;
use strict;

INIT {
    my $string = 'Seconds_Behind_Master: 1';
    my ($s) = ($string =~ /Seconds_Behind_Master: ([\d]+)/);
    if ($s > 10) {
        print "Too long... ${s}";
    } else {
        print "It's ok";
    }
}

__END__

我如何使用 bash 脚本实现此目的?基本上,我希望能够读取并匹配字符串“Seconds_Behind_Master: N”末尾的值,其中 N 可以是任何值。

最佳答案

您可以在 bash 中使用正则表达式,就像在 perl 中一样。

#!/bin/bash

STRING="Seconds_Behind_Master: "

REGEX="Seconds_Behind_Master: ([0-9]+)"

RANGE=$( seq 8 12 )

for i in $RANGE; do
    NEW_STRING="${STRING}${i}"
    echo $NEW_STRING;

    [[ $NEW_STRING =~ $REGEX ]]
    SECONDS="${BASH_REMATCH[1]}"
    if [ -n "$SECONDS" ]; then
        if [[ "$SECONDS" -gt 10 ]]; then
            echo "Too Long...$SECONDS"
        else
            echo "OK"
        fi
    else
        echo "ERROR: Failed to match '$NEW_STRING' with REGEX '$REGEX'"
    fi
done

输出

Seconds_Behind_Master: 8
OK
Seconds_Behind_Master: 9
OK
Seconds_Behind_Master: 10
OK
Seconds_Behind_Master: 11
Too Long...11
Seconds_Behind_Master: 12
Too Long...12

man bash #BASH_REMATCH

关于regex - Bash 正则表达式字符串变量匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37935415/

相关文章:

python - 正则表达式从字面上将\t 解释为\t 而不是制表符

javascript - 无法打印 JavaScript 中正则表达式的匹配项

Linux 清理目录脚本

perl - 如何让 Perl 在读取用户输入时识别 Shift-Tab

javascript - 从转换字符串中提取不同的 css 转换?

C 调用 chdir 后损坏的双链表

arrays - awk 输出元素乱序

perl - 如何在 Perl Tkx 中实现带滚动条的可调整大小的 TreeView 小部件?

linux - 如果 Perl 尝试对正在上传的文件调用 move() 会发生什么?

python - 点匹配而不是 ? Python 正则表达式中的组