Поиск в квадратных скобках [ _] поиск подчеркивания и вывод эхо-результата "OK" или "FAIL"

Вы могли бы сделать это:

awk '
    !($1 in a) || NF > 1 {a[$1] = $0} 
    END {for (url in a) print a[url]}
' dupe.txt

Порядок строк не сохраняется.

Это сохранит порядок, но потребует 2 проходов по файлу:

awk '
    NR == FNR {
        if (!($1 in a) || NF > 1) {a[$1] = $0} 
        next
    }
    $0 == a[$1]
' dupe.txt dupe.txt
0
25.08.2020, 08:38
2 ответа

Простое решение

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

Это просто проверяет, содержит ли какая-либо строка во входных данных [, за которым следует _, за которым следует ],в этой последовательности, но (, возможно, )с другими перемешанными символами. Будучи простым решением, оно несовершенно; он считает

sda6[0] _sdb6[1]

для соответствия шаблону.

Эта версия:

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

требует, чтобы за [следовал _без промежуточных ]символов(с сохранением требования, чтобы за _в конце концов следовал ]. Это все равно будет считаться

sda6[0_ sdb6[1]

как имеющий _между скобками. Насколько я понимаю, интерпретация этого ввода неоднозначна, и мне все равно, поскольку в вопросе не говорится, как обрабатывать искаженные данные.

1
18.03.2021, 23:10

Использование GNU grep в режиме PCRE...

Предполагая, что вас на самом деле интересует только последняя запись в строке состояния для устройства, т.е. [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,}, если хотите; результат тот же. Мой стиль для такого регулярного выражения - использовать круглые скобки.

1
18.03.2021, 23:10

Теги

Похожие вопросы