내 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]
_
괄호 사이에 하나가 있기 때문입니다 . 내가 아는 한, 이 입력의 해석은 모호하며 질문에 잘못된 데이터를 처리하는 방법이 나와 있지 않기 때문에 상관하지 않습니다.
답변2
PCRE 모드에서 GNU grep 사용...
[some_combination_of U and _]
각 레이드 장치의 작동/작동 상태(작동 여부)를 나타내는 장치 상태 줄의 최종 항목에만 관심이 있다고 가정합니다. 질문에서 암시하지만 명시적으로 언급하지는 않습니다 U
._
#!/bin/bash
if grep -Pq '\[[[:alpha:]]*?(_){1,}[[:alpha:]]*?\]' /proc/mdstat
then
echo "FAIL"
else
echo "OK"
fi
대괄호 안에 "_"의 모든 인스턴스가 포함되도록 하려면 다음을 수행하세요.
#!/bin/bash
if grep -Pq '\[[^]](_){1,}.*?\]' /proc/mdstat
then
echo "FAIL"
else
echo "OK"
fi
(_){1,}
원하는 대로 작성할 수 있습니다 _{1,}
. 결과는 동일합니다. 이러한 정규식에 대한 내 스타일은 괄호를 사용하는 것입니다.