1

我正在尝试使用 egrep 和 regex 验证输入。这是来自脚本(c-shell)的行:

echo $1 | egrep '^[0-9]+$'
if ($status == 0) then
set numvar = $1
else
    echo "Invalid input"
    exit 1
endif

如果我通过管道 echo 到 egrep 它可以工作,但它也会在屏幕上打印变量,这是我不需要的。

4

3 回答 3

4

要简单地抑制输出,您可以将其重定向到空设备。

echo $1 | egrep '^[0-9]+$' >/dev/null
if ($status == 0) then
set numvar = $1
else
    echo "Invalid input"
    exit 1
endif

您可能还需要考虑使用该-c选项来获取匹配数,而不是使用状态。

此外,除非您正在使用 ,否则csh状态将存储在$?not in$status

于 2009-11-07T11:23:43.723 回答
3

grep有一个-q抑制输出的选项

所以:

egrep -q '^[0-9]+$'
于 2009-11-07T11:30:06.650 回答
0

你可以使用 awk

$ echo "1234" | awk '{print $1+0==$1?"ok":"not ok"}'
ok
$ echo "123d4" | awk '{print $1+0==$1?"ok":"not ok"}'
not ok
于 2009-11-07T11:13:48.317 回答