角かっこ[_]の間を検索して下線を検索し、エコー結果「OK」または「FAIL」を出力します。

角かっこ[_]の間を検索して下線を検索し、エコー結果「OK」または「FAIL」を出力します。

私のcat /proc/mdstat結果は次のとおりです。_角かっこの間に下線がある場合[]にのみ、echo "OK"または "FAIL"をエクスポートしたいと思います。どうすればいいですか?

[root@srv4 ~]# cat /proc/mdstat
Personalities : [raid1] [raid10]
md6 : active raid10 sda6[0] sdd6[3] sdb6[1] sdc6[2]
      7237440512 blocks 512K chunks 2 near-copies [4/4] [UUUU]
      bitmap: 0/54 pages [0KB], 65536KB chunk

md5 : active raid10 sdb5[1] sda5[0] sdc5[2] sdd5[3]
      153594880 blocks 512K chunks 2 near-copies [4/4] [UUUU]

md3 : active raid1 sda3[0] sdc3[2] sdb3[1] sdd3[3]
      209918912 blocks [4/4] [UUUU]
      bitmap: 2/2 pages [8KB], 65536KB chunk

md2 : active raid1 sdd2[3] sdc2[2] sda2[0] sdb2[1]
      523200 blocks [4/4] [UUUU]
[root@srv2 public]# cat /proc/mdstat
Personalities : [raid1]
md6 : active raid1 sda6[0] sdb6[1]
      1588416448 blocks [2/2] [UU]
      bitmap: 0/12 pages [0KB], 65536KB chunk

md5 : active raid1 sdb5[1] sda5[0]
      153597888 blocks [2/2] [UU]
      bitmap: 0/2 pages [0KB], 65536KB chunk

md3 : active raid1 sda3[0] sdb3[1]
      209918912 blocks [2/2] [UU]
      bitmap: 1/2 pages [4KB], 65536KB chunk

md2 : active raid1 sda2[0] sdb2[1]
      523200 blocks [2/2] [UU]

可能性が[_UU]高い[_UUUU]

予想される結果:

if there is no [_] between any of brackets is "OK" 
if there is [_] between any of brackets is "FAIL"

ベストアンサー1

簡単な解決策は

#!/bin/sh
if grep -q '\[.*_.*]' /proc/mdstat
then
        echo FAIL
else
        echo OK
fi

これは、入力行にa [、a _、aが順番に含まれているが](おそらく)他の文字と混在していることを確認します。簡単な解決策では不完全だと思われます。

sda6[0] _sdb6[1]

パターンに合わせて。

このバージョン:

#!/bin/sh
if grep -q '\[[^]]*_.*]' /proc/mdstat
then
        echo FAIL
else
        echo OK
fi

リクエスト[の後に_ ]途中で文字なし_(最終フォローアップの要件を維持します  ]。これはまだ機能します。

sda6[0_ sdb6[1]

_括弧の間に1つがあるためです。私が知る限り、この入力の解釈はあいまいで、質問に間違ったデータを処理する方法が示されていないので気にしません。

おすすめ記事