정규식, 처음에만 발생

정규식, 처음에만 발생

파이프라인 출력이 있고 free -o -m | awk '{print $4}'첫 번째 줄과 두 번째 줄에 있는 두 숫자를 단계별로 실행하려고 합니다. 그래서 두 개의 정규 표현식이 필요합니다. 시도했지만 ^[0-9]{1,3}$이는 모든 항목과 일치합니다. 111 222 333 입니다

첫 번째 정규식은 111이고 두 번째 정규식은 222가 되기를 원합니다.

답변1

귀하의 질문은 시대에 약간 뒤떨어져 있습니다.

아마도 다음과 같은 것을 원할 것입니다.

free -o -m | awk '
  $1 == "Mem:" {print "do something with " $4}
  $2 == "Swap:" {print "do something with " $4}'

그것은 다음과 같습니다:

eval "$(free -o -m | awk '
  $1 == "Mem:" {print "free_mem=" $4}
  $1 == "Swap:" {print "free_swap=" $4}'
)"
printf "%s\n" "Free mem: $free_mem" "Free swap: $free_swap"

답변2

나는 아직도 당신이 여기서 질문하는 것을 완전히 이해하지 못하는 것 같습니다. 그러나 free -o -m | awk '{print $4}'다음 형식의 출력을 제공합니다.

공유
123
456

Bash의 조건에 따라 123 및 456을 확인하려면 정규식을 조작하는 대신 for 루프를 사용할 수 있습니다.

for value in `free -o -m | awk '{print $4}'`; do 
    if [[ "$value" != "shared" && CONDITION ]]; then echo "$value matched my condition"; fi; 
done;

관련 정보