我有一个需要验证的文本文件,我正在尝试找出如何检查预期值是否存在。
我的文件的一个例子是
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
行匹配以便让它打印它。