Вы можете использовать один вызов awk
(обратите внимание, что вам не нужно cat
, просто передайте файл awk
напрямую):
awk -F'[][():[:space:]]+' '/\(F\)/{print $4}' /proc/mdstat
-F'[][():[:space:]]+'
устанавливает полеразделитель для регулярного выражения, который соответствует 1 или более ]
, [
, (
, )
, :
или пробельным символам. Таким образом, поля, которые вы получите, будут [md2, active, raid1, nvme0n1p3, 0, F, nvme1n1p3, 1]
, и, как вы видите, ваше значение находится в поле 4.
Я также добавил проверку скобок вокруг F
, возможно, это приведет к поиску строкибезопаснее.
Онлайн тест :
s="some line 1
md2 : active raid1 nvme0n1p3[0](F) nvme1n1p3[1]
last line"
awk -F'[][():[:space:]]+' '/\(F\)/{print $4}' <<< "$s"
# => nvme0n1p3