如何在unix中打印使用grep-v-l过滤的前一行;“模式”;

如何在unix中打印使用grep-v-l过滤的前一行;“模式”;,unix,grep,Unix,Grep,我有一个文件,内容如下: label1 name 1 label2 id 2 label3 id 0 我使用grep扫描这些行,如果与模式“label”不匹配的行的值大于0,则会导致失败 if (grep -v -l "label" fileA) > 0 then echo -e "failure" else echo -e "success" fi 我还想打印与失败值(即>0)对应的行 我在下面试过,但没有结果。我不确定我到底哪里做错了 ps -ef | grep

我有一个文件,内容如下:

label1 name
1
label2 id
2 
label3 id
0
我使用grep扫描这些行,如果与模式“label”不匹配的行的值大于0,则会导致失败

if (grep -v -l "label" fileA) > 0
then
    echo -e "failure"
else
    echo -e "success"
fi
我还想打印与失败值(即>0)对应的行

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

ps -ef | grep -v -l "label" fileA > 0
我是Unix新手,正在尝试找出如何打印故障行

请帮助

试试这个-

$ 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
您可以根据需要筛选值,如下所示-

$ awk '/label/ {k=$0;getline tmp;if(tmp > 0) {print k,tmp}}' f
label1 name 1
label2 id 2
编辑1:如果您的文件有一些没有值的标签-


通常,如果找到所选行,
grep
的退出状态为0,否则为1。我想你在找grep-c:

$ grep -c "label" f
3
$ echo $?
0
所以你可以做一些像

if [ $(grep -c "label" f) -gt 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

您是否知道
>0
重定向到名为
0
的文件?哎呀!对我刚刚看到它将输出重新定向到文件。我不知道如何打印。知道吗?这会打印所有行,而不是故障行
label1 name 1
label2 id 2
label3 id 0
。这会影响awk的输出吗?@user1023627-2nd cmd
awk'/label/{k=$0;getline tmp;如果(tmp>0){print k,tmp}}'f
将只打印那些值
>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