Это наиболее вероятно брандмауэр, который сокращает Ваше неактивное соединение через некоторое время.
Можно настроить openssh
сервер или клиент для отправки KeepAlive через некоторое время.
Отправляйте KeepAlive каждые 5 минут на сервер:
ssh user@server -o ServerAliveInterval=300
Если Вы управляете openssh-server
, можно также отправить KeepAlives клиенту после определенного интервала. Добавьте следующее к /etc/ssh/sshd_config
:
ClientAliveInterval 300
TCPKeepAlive yes
TCPKeepAlive
должен быть yes
по умолчанию.
Перезапустите openssh-server
после модификации:
/etc/init.d/ssh restart
Это будет работать независимо от того, сколько байтов находится на одной строке
sed ':a $!N;s/\n/ /;ta;s/\(\(\([[:xdigit:]]\)\{2\} *\)\{8\}\([[:xdigit:]]\)\{2\}\) */\1\n/g'
$ cat alignbyte
00 2f c6
b8 29 fd 02
37 11 00 9f 74 34 0b 60 72 38
20 00 9e 61 33 8e ab 8a c0 09
00 fa f0 66
6d 0c 44 d6 24
00 a1 11 9d a2 13 a5 b3 83
$ sed ':a $!N;s/\n/ /;ta;s/\(\(\([[:xdigit:]]\)\{2\} *\)\{8\}\([[:xdigit:]]\)\{2\}\) */\1\n/g' alignbyte
00 2f c6 b8 29 fd 02 37 11
00 9f 74 34 0b 60 72 38 20
00 9e 61 33 8e ab 8a c0 09
00 fa f0 66 6d 0c 44 d6 24
00 a1 11 9d a2 13 a5 b3 83
Я просто заметил, что Ваш входной файл, кажется, имеет два пробела после каждого набора 9 байтов, за исключением самого последнего набора. Если это - опечатка, и все наборы 9 байтов действительно разделяются двумя пробелами затем команда для получения то, что Вы хотите, просто это:
sed 's/ /\n/g' file
Один подход, который не заботится о точной форме входа, должен разделить его на один объект на строку затем объекты группы в желаемом числе.
tr -s '[:space:]' '\n' |
awk '
NR % 9 != 1 {printf " "}
{printf "%s", $0}
NR % 9 == 0 {print ""}
END {if (NR % 9) print ""}'
Если Вы не возражаете против дополнительного пространства в конце строки, можно упростить awk
кодируйте немного:
tr -s '[:space:]' '\n' |
awk '
{printf "%s ", $0}
NR % 9 == 0 {print ""}
END {if (NR % 9) print ""}'
Если Ваш вход не имеет никаких пустых строк, и все объекты являются той же шириной, то существует простое решение: поместите все на одной строке затем выполняет перенос строк.
{ tr -s '\n' ' '; echo; } | fold -w 27
Если Вы имеете fmt
утилита, это может объединить обе подзадачи:
fmt -w 27
Основной прием:
grep -o ".. .. .. .. .. .. .. .. .." your-file.txt
Если длина строк не может быть несколькими из 9 hexa байтов, то удалите CRCL:
tr -d '\n\r' < your-file.txt | grep -o ".. .. .. .. .. .. .. .. .."
Если файл может содержать последовательные пробелы:
tr -s ' \n\r' ' ' < your-file.txt | grep -o ".. .. .. .. .. .. .. .. .."
Я, ценят комплекс sed
/awk
программирование ответов.
Здесь, я предлагаю читаемые приемы с помощью основных инструментов.
Это могло бы работать Вы (во втором экземпляре, где каждая строка 8 байтов длиной):
sed '$!N;s/\n/ /;s/ /\n/9;P;D' file
Прежде всего (записи переменной длины):
fmt -w27 file
Или с GNU sed:
sed 'L27;d' file
n%9 != 0
байты. – Kevin 26.01.2012, 00:03