我有以下用 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
关于regex - Bash 正则表达式字符串变量匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37935415/