如何在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 cmdawk'/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