在IF语句中cat期间的分段错误(coredump)

时间:2014-02-27 11:01:34

标签: unix ksh

我有一个文件ut.txt,它有一个长度为385186字节的值。我正在使用以下内容来查找值是否为Numeric:

if [[ `cat ut.txt` = +([0-9]) ]]
then
echo "Numeric"
fi

这适用于较小的文件。但是使用ut.txt(385186字节),它会给我以下错误:

Segmentation Fault(coredump)

有人建议在避免错误的同时进行检查吗?

2 个答案:

答案 0 :(得分:0)

你可以尝试

grep -q '[a-zA-Z]' ut.txt || echo "Numeric"

Grep搜索任何已定义的序列([a-zA-Z]),如果未找到(||echo,则搜索您想要的内容。

更新 ,如评论中所述,您可能有另一个(例如非ASCII,如重音)字符,可归类为非数字。

在这种情况下,您可以使用

grep -q '[^0-9]' ut.txt || echo "Numeric"

将搜索除数字字符以外的任何内容。

答案 1 :(得分:0)

你有点滥用反引号的功能。它们不应该处理那么长的输出。段错不是ksh应该做出的反应,但我建议使用流式版:

if egrep -q '^[0-9]+$' ut.txt
then
  echo "Numeric"
fi