Grep несколько строк с разными шаблонами [закрыто]

Вот способ добиться того, что вы ищете, хотя и не с использованием цикла for, а с помощью цикла while:

stat=$(du /home/test/)
echo "$stat" | while read i; do
    folder=$(echo "$i" | awk '{print $2}')
    echo "mail content" | mail -s $folder kenny@gmail.com
done

Конечно, как уже прокомментировал Archemar, нет причин не направлять вывод du напрямую в цикл:

du /home/test/ | while read i; do
    folder=$(echo "$i" | awk '{print $2}')
    echo "mail content" | mail -s $folder kenny@gmail.com
done

Awk на самом деле тоже не нужен. Сценарий можно упростить таким образом:

du /home/test/ | while read size folder; do
    echo "mail content" | mail -s "$folder" kenny@gmail.com
done

Поскольку вы, похоже, не используете размеры каталогов, для вычисления которых предназначен du, вы можете использовать find вместо:

find /home/test -type d | while read folder; do
    echo "mail content" | mail -s "$folder" kenny@gmail.com
done
1
15.11.2018, 13:23
1 ответ

Вы можете просто grepдля каждого из кодов ошибок, которые вы хотите сопоставить. Нет необходимости использовать echo, так как grepуже выводит совпадающие строки.

grep -E '000090|960|9420|out\[ *002: *\]<ISO9090-9999999902299>' /var/debug/logs/filename

Вы можете использовать *в качестве имени файла, если хотите искать во всех файлах в папке, а не только в одном.

0
28.01.2020, 00:23

Теги

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