在匹配正则表达式bash后找到一行中是否有任何字符串

时间:2017-12-13 19:38:31

标签: bash awk grep

在下面的文件中,我会发现所有带有“PRIO”的行在此之后是否有任何值,如果有一些值丢失,我想把它写成输出。

我尝试用grep做到这一点,但只有在有一次出现单词时才会匹配。

cat PATH_TO_FILE | grep 'PRIO' &> /dev/null

if [ $? == 0 ]; then
    echo "matched"
else
    echo "not found"
fi

文件结构看起来与下面的这个相似

name1
sdgk
PRIO     3


name2
PRIO
dsl        dfhhhdf

name3
fnslkf hsdhfd    
jlkg;jslk sgdgdsg 
kfasdjmgkdlsgl      sdggsehg
PRIO 1 


name4
sdgds
dsdsgdg
PRIO              2
sdgg

2 个答案:

答案 0 :(得分:0)

不确定要测试的是什么,但是

$ grep -q 'PRIO\s*$' file

检查之后是否有任何PRIO没有任何值。对于您的示例输入,这将成功,您可以将其用作错误条件。

if grep -q 'PRIO\s*$' file
then echo "found missing value instance"
else echo "all instances have values"
fi

答案 1 :(得分:0)

使用awk,通过检查字段数量可以非常简单。

awk '/PRIO/{ str=(NF>1)?"matched":"not found"; print str }' <file>

这样做:

  • /PRIO/:如果一行包含单词PRIO,请执行操作{...}
  • {...}:如果字段数大于1`(NF> 1)1,则匹配,否则不匹配。

如果您想确保PRIO是第一个单词,请使用$1=="PRIO",如果您想打印行号,请使用

awk '($1=="PRIO"){ str=(NF>1)?"matched":"not found"; print NR,str }' <file>