Вы можете подключиться к любому порту с помощью telnet, даже если за ним нет сервера telnet. Если порт ожидает, что клиент что-то отправит первым, то при подключении вы ничего не увидите, а у вас именно такая ситуация.
Таким образом, может быть запущен telnet-сервер, ожидающий ввода, может быть запущено что-то еще, или это может быть функция брандмауэра, которая просто делает вид, что вы можете к ней подключиться. По одному telnet
трудно сказать.
Если вы хотите узнать, какие возможные службы работают на неизвестном устройстве, я рекомендую проверить с помощью nmap
.
Используя пробел или =
в качестве разделителя полей, начните подсчет нулевых значений со столбца 7. :Если их больше одного, перейдите к следующей строке, иначе напечатайте строку.
awk -F '[= ]+' '{
z = 0
for (c = 7; c <= NF; c += 2)
if ($c == 0.0 && ++z > 1)
next
print
}' file
Это самый простой способ вывести строки, которые не содержат более одного экземпляра этой строки.:
grep -v '=0\.00000000.*0\.00000000' file.txt
Поскольку в вашем файле эта строка появляется только после столбца 5, и вы хотите напечатать только те строки, где она появляется один раз или не появляется вообще, в приведенном выше примере будут напечатаны строки, в которых она не появляется более одного раза. Шаблон =0\.00000000.*0\.00000000
соответствует любым двум экземплярам =0.00000000
в одной строке, независимо от того, в каких столбцах они появляются, и если в любой строке есть третий, четвертый, пятый и т. д., строка не будет напечатана. Команда, которую вы пробовали, печатает любые строки, которые не содержат экземпляров этой строки, поэтому она не печатает вторую строку, а это то, чего вы не хотели.
Если вы хотите, чтобы он печатал строки, которые не содержат больше экземпляров этой строки, просто добавьте еще один .*0.00000000
. Например, для печати строк, содержащих не более трех:
grep -v '=0\.00000000.*0\.00000000.*0\.00000000' file.txt
Это будет включать третью строку, содержащую три экземпляра этой строки.
Самое простое решение, которое мне удалось найти, это (да, это простое):
awk -F '=0\\.00000000' 'NF<=2' file
Есть несколько возможных решений.
grep
довольно быстро находит текст, ему нужно только правильное регулярное выражение.
grep -vE '^([^ ]* ){5}.*(=0\.00000000.*){2}' file
^([^ ]* ){5}
будет соответствовать столбцам (, а не пробелам ), разделенным пробелами (5({5}
)из них ), от начала(^
)строки. .*(=0\.00000000.*){2}
будет соответствовать как минимум двум =0\.00000000
в этой строке. -v
)и использовать расширенные (ERE )регулярные выражения (меньше \
необходимо ). Он будет ограничен количеством 0
совпадающих с ним.
Sed с похожим регулярным выражением:
sed '/^\([^ ]* \)\{5\}.*\(=0\.00000000.*\)\{2\}/d' file
но он напечатает любую строку, которая не соответствует шаблону (easy to fail положительный ).
Или
Awk обрабатывает строку как текст.
awk -F '=0\\.00000000' 'NF<=2' file
Awk, который может анализировать числа с плавающей запятой, а затем проверять значение 0
.
Пожалуйста, используйте ответ @GlennJackman.