Считаются ли инструменты LSM, такие как AppArmor и SELinux, IDS/IPS?

Обработка строки как состоящей из полей, разделенныхabc:

$ echo abcsdabcsdabc | awk -F 'abc' '{ print (length > 0 ? NF - 1 : 0) }'
3

Количество вхождений разделителя abcравно 1 минус количество полей, которые он ограничивает.

$ echo abcsdabcsdabc | awk '{ n=0; while (sub("abc", "xxx")) n++; print n }'
3

Это заменяет подстроку abcиз строки на xxxи подсчитывает, сколько раз это делается, а затем выводит это число. n=0не нужен, если есть только одна строка ввода.

Функция gsub()в awkвозвращает количество сделанных замен, поэтому приведенное выше можно упростить до

$ echo abcsdabcsdabc | awk '{ print gsub("abc", "xxx") }'
3

В bashможно сделать то же самое, что и в той awkпрограмме, которая используетsub():

string=abcsdabcsdabc

n=0
while [[ $string == *abc* ]]; do
    n=$(( n+1 ))
    string=${string/abc/xxx}  # replace first occurrence of "abc" with "xxx"
done
printf '%d\n' "$n"

При этом используется цикл whileдля замены подстроки abcиз значения в $stringна xxxдо тех пор, пока в $stringне будет найдено больше вхождений abc, точно так же, как второй awkпрограмма выше делает.

3
10.07.2020, 03:22
0 ответов

Теги

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