-1

我正在尝试使用一行是否包含日期作为 if 语句的条件:

if [grep -n -v '[0-9][0-9][0-9][0-9]' $line |wc -l==0]
then
...

以上返回错误。我不一定需要使用grep。grep 处理的行如下所示:

1984 Dan Marino QB Miami Dolphins 

任何帮助表示赞赏。

4

5 回答 5

2

您可以使用 bash 内置函数进行检查:

re='\b[[:digit:]]{4}\b'
if [[ $line =~ $re ]] ; then 
  echo ok; 
fi
于 2013-06-06T21:23:35.670 回答
2
if [[ $(echo $line | grep -q '[0-9][0-9][0-9][0-9]') ]]; then

# do something
fi
于 2013-06-06T21:21:11.393 回答
1
[grep -n -v '[0-9][0-9][0-9][0-9]' $line |wc -l==0]

问题1:[(space).....(space)] 你需要那些空间

问题2:没有[ foo==bar ]你可以做类似的事情[ $(echo "0") = "0" ]或者 [[ $(echo "0") == 0 ]]这里$(echo "0")是一个例子,你应该填写你的命令。

于 2013-06-06T21:20:35.080 回答
0

使用命令替换和正确的 bash 语法。

 [[ "`grep -n -v '[0-9][0-9][0-9][0-9]' $line | wc -l`" -eq 0 ]]
于 2013-06-06T21:30:43.360 回答
0

您可以使用-q选项调用 grep 并检查返回值:

if [ $(grep -qv '[0-9][0-9][0-9][0-9]' $line) -eq 0 ]; then
   # ...
fi
于 2013-06-06T21:26:21.420 回答