検証が必要なテキストファイルがあり、期待値が存在するかどうかを確認する方法を見つけようとしています。
私のファイルの例は次のとおりです。
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行目を印刷します。 パターンが表示された後、ユーザーが4行目を取得する場所 - この値を保存できる場合は、予想値と比較できると思いますが、まだ保存する方法がわかりません。
どんな案内でも歓迎します!
答え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
ラインマッチングで印刷します。