模式出现后验证第 4 行值

模式出现后验证第 4 行值

我有一个需要验证的文本文件,我正在尝试找出如何检查预期值是否存在。

我的文件的一个例子是

InitialPattern:
   Value1=somevalue
   Value2=somevalue
   Value3=somevalue
   InstallationName=InstallationX

我不关心第 2-4 行,但我需要在第 5 行中验证这一点

   InstallationName=Installation1

顺便说一下,这条线并不总是存在,此时该模式再次开始

InitialPattern:

到目前为止,我所做的工作是有效的,但在该行完全不出现的情况下则无效:

      instName="Installation1"
      installationNames=$(cat file.txt | grep InstallationName)
      IFS=$'\n' read -rd '' -a array <<< "$installationNames"
      for element in "${array[@]}"
      do
         if [[ "$element" =~ "$instName" ]]; then
           test="pass"
         else
           test="fail"
           break
         fi
      done

有任何想法吗?我正在看这个帖子:打印匹配行和匹配行中的第 n 行 用户在模式出现后得到第四行的地方 - 我在想如果我可以存储这个值,我可以将它与预期值进行比较,但我还不完全确定如何存储它。

欢迎任何指导!

答案1

test=$(
    sed '
        /InitialPattern:/! d
        n
        n
        n
        $!n
        /.*Installation[0-9]\+$/d
        s/.*/FAIL/p
        q
        ' file.txt)
test=${test:-PASS}

答案2

sed -e'/\n/D;t'       -e:N  \
    -e'/^InitialPattern/ N' \
    -e'/\nInitialPattern/D' \
    -e's/\n/&/4;tD'         \
    -e'$!s//&/; tN'   -e:D  \
    -e's/ *\(\(Installation\)Name=\2[X0-9]\{1,\}\) *$/\1/;D'

我不太确定你想用它做什么,但这只打印符合你的规范的序列中的最后一行。

这里。我写了一篇很重要的文章。因此4,如果需要,您可以将 更改为您想要的任何内容 - 您输入的数字是最近出现的换行符之间必须有多少个换行符InitialPattern匹配和Installation行匹配以便让它打印它。

相关内容