如何在unix中打印前一行,使用grep -v -l" pattern"

时间:2017-04-11 13:33:11

标签: unix grep

我的文件内容如下:

label1 name
1
label2 id
2 
label3 id
0

我正在使用grep扫描线条,如果线条与图案不匹配,则导致失败"标签"值大于0

if (grep -v -l "label" fileA) > 0
then
    echo -e "failure"
else
    echo -e "success"
fi

我还想打印那些与失败的值相对应的行(即> 0)

label1 name
label2 id

我在下面尝试过,但没有结果。我不确定,我在哪里做错了

ps -ef | grep -v -l "label" fileA > 0

我是Unix的新手,并试图弄清楚如何打印故障线。

请帮忙

2 个答案:

答案 0 :(得分:0)

试试这个 -

    public class COnsumersReport
    {
        public int ID { get; set; }
        public string  name { get; set; }
        public string sirname { get; set; }
        public double Borc { get; set; }
    }

您可以根据需要过滤价值,如下所示 -

$ cat f
label1 name
1
label2 id
2
label3 id
0
$ awk '/label/ {k=$0;getline tmp;print k,tmp}' f
label1 name 1
label2 id 2
label3 id 0
  

编辑1:如果你的文件有一些没有价值的标签 -

$ awk '/label/ {k=$0;getline tmp;if(tmp > 0) {print k,tmp}}' f
label1 name 1
label2 id 2

答案 1 :(得分:0)

通常情况下,如果找到选定的行,grep的退出状态为0,否则为1。我认为你很期待grep -c

$ grep -c "label" f
3
$ echo $?
0

所以你可以做点什么

if [ $(grep -c "label" f) -gt 0 ]; then
   echo match found
fi

grep -c "label" f
if [ $? -eq 0 ]; then
   echo match found
fi

您还想要打印找到的行。您可以将它们存储在变量中。

foundlabels=$(grep "label" f)
echo "You can test on \$? here, but now you have another way."
if [ -n "${foundlabels}" ]; then
   echo "failure"
   echo "${foundlabels}"
else
  echo "success"
fi