Удаление закомментированных и пустых строк из формы/etc/hosts
:
sed -e 's/#.*//' -e 's/[[:blank:]]*$//' -e '/^$/d' /etc/hosts
Здесь используются три sed
выражения в следующем порядке:
#
(, включая#
). С учетом вашего примера файла получается
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
Это, очевидно, не пытается проверить оставшиеся адреса и имена.
Это должно появиться, если указан способ.
echo -n "$(date) "
ping -c 1 8.8.8.8 | awk '$7 ~ /^time=/ {print $7}'
Не совсем понятно, нужно ли вам поле единиц, поскольку в вашем сообщении есть конфликтующие образцы. Если вы это сделаете, измените конец вот такprint $7,$8
ping -c 1 8.8.8.8 | awk -v date="$(date)" '$7 ~ /^time/{ print date, $7, $8 }'
Это сохраняет вывод подстановки команды date
в переменную awk date
и печатает дату и 7-е и 8-е поля, только если 7-е поле начинается с time
.
echo "$(date) time=$(ping -c 1 8.8.8.8 | awk '/transmitted/{print $NF}')"
фраза $ (.... )означает запуск команды, которая находится внутри скобок, и сюда вставляется вывод.
Команда ping соответствует другим предложениям, но выходные данные фильтруются немного по-другому -это выходные данные только ping...
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=22.9 ms
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 22.919/22.919/22.919/0.000 ms
Команда awk ищет строку, соответствующую /transmitted/, а затем печатает последнее значение в строке, в данном случае значение времени. Поскольку количество слов в строке может варьироваться в зависимости от реализации ping или вывода и т. д., мы используем NF, чтобы всегда выбирать последний элемент строки.