grep和进程替换

时间:2016-01-24 17:21:40

标签: bash grep

我尝试使用grep进行进程替换,如下所示:

#!/bin/bash
if [grep -c "*" <(cut -d"," -f5 input_q1.csv) ]
then
  echo "Yes";
else
  echo "No";
fi

但我收到了错误:

line 2: [grep: command not found

我错过了什么?

2 个答案:

答案 0 :(得分:1)

[ ... ]不是if语句的语法的一部分;相反,[(也称为test)是一个Bash内置命令,它通常用作if语句中的test-command。

在你的情况下,你的测试命令是grep而不是[,所以你会写:

if grep -c "*" <(cut -d"," -f5 input_q1.csv) ; then

此外,这里没有使用过程替换的真正理由。管道的总体结果是管道中最终命令的结果;和grep支持从标准输入读取。所以你可以写:

if cut -d"," -f5 input_q1.csv | grep -c "*" ; then

支持更广泛的系统。

(顺便说一下,,周围的引号不做任何事情:-d","表示-d,表示"-d,"。如果你的目标是&#34 ;突出显示&#34;分隔符,或以某种方式设置它,然后将它分成单独的参数可能更有意义:-d ,。但这是一个偏好问题。)

答案 1 :(得分:0)

if cut -d"," -f5 input_q1.csv | grep -c "*"; then

...并且您需要将*更改为有效的正则表达式,因为*肯定不是。

正如我在Why doesn't my if statement with backticks work properly?中解释的那样, if中的shells接受命令。

[是一种调用test命令的方法 - 它不像if用于其他语言的括号。