正则表达式,仅第一次出现

正则表达式,仅第一次出现

我有一个管道输出,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;

相关内容