В grep регулярном выражении, [
специальный символ. Для литерала [
, Вы должны к обратной косой черте выйти из него, как так: \[
.
Обратите внимание что полнота Nov 22 [0-9]: ... [10.50.98.68
регулярное выражение. Вы не можете только указать на него и сказать, что "эта часть является regex, эта часть должна быть литеральной строкой" и ожидать grep
смочь считать Ваши мысли. Вот почему необходимо выйти из любых специальных символов, которые являются частью литеральных строк, которым Вы хотите соответствовать.
Не связанный, но каждое возникновение [0-9]
в Вашем регулярном выражении только соответствует отдельному символу. Кроме того, .
специальный символ, которого должны будут оставить также. Вы, вероятно, хотите что-то как следующее для Вашего регулярного выражения:
^Nov 22 [0-9][0-9]:[0-9][0-9]:[0-9][0-9] Received Packet from \[10\.50\.98\.68
Сначала заметка о стиле. Использование цикла for
для итераций по строкам вывода редко является хорошей идеей. Цикл for
разбивает свой вход на пробелы, так что если у вас больше одного слова на строку, то оно разбивает каждое слово на разные переменные. Вместо этого следует использовать , а
, так как это более изящно работает с пробелами. Также, обычно предпочтительнее использовать $(command)
вместо `command`
.
Хотя, вероятно, это не ваша проблема. Главная проблема в том, что вы перекликаетесь с результатами lsvgfs ${LINE}
для каждой строки результатов lsvgfs ${LINE}
:
for LINE2 in `lsvgfs ${LINE}` ; do
echo "`lsvgfs ${LINE}` \n"
done
Так что, конечно, вы получаете эти строки дважды:
/
/usr
Попробуйте вместо этого:
lsvg | while read LINE; do
echo "Volume Group: ${LINE}"
lsvgfs "${LINE}" | while read LINE2; do
echo "File System: ${LINE2}"
df -g ${LINE2}
done
echo ""
done