Выровняйте шестнадцатеричный текстовый файл на уровне 9 байтов каждая строка

Это наиболее вероятно брандмауэр, который сокращает Ваше неактивное соединение через некоторое время.

Можно настроить 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
4
06.04.2019, 02:16
5 ответов

Это будет работать независимо от того, сколько байтов находится на одной строке

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
6
27.01.2020, 20:49
  • 1
    Как другой ответ, это не будет работать, если вход будет иметь строку с n%9 != 0 байты. –  Kevin 26.01.2012, 00:03
  • 2
    , который верен. Я отформатировал свой вывод, чтобы быть 8 байтов длиной в каждой строке, и это sed выражение не работает. –  liv2hak 26.01.2012, 00:05
  • 3
    @liv2hak видит обновленный ответ, который является –  SiegeX 26.01.2012, 00:16

Один подход, который не заботится о точной форме входа, должен разделить его на один объект на строку затем объекты группы в желаемом числе.

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
4
27.01.2020, 20:49
  • 1
    Интересный: tr -s ... Перевод происходит перед Сжатием... очень удобный –  Peter.O 26.01.2012, 05:26

Основной прием:

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 программирование ответов.
Здесь, я предлагаю читаемые приемы с помощью основных инструментов.

0
27.01.2020, 20:49
  • 1
    Это будет только работать, если каждая строка входа будет иметь несколько девять байтов. –  Kevin 25.01.2012, 23:35
  • 2
    , который является true.in случаем моего файла, который не является true.is там лучший способ сделать это.? –  liv2hak 25.01.2012, 23:50
  • 3
    Дорогой @Kevin, только что добавил я tr для чистки входного файла –  olibre 26.01.2012, 11:05
  • 4
    Дорогой @liv2hak, я только что добавил tr для чистки входного файла –  olibre 26.01.2012, 11:06

Это могло бы работать Вы (во втором экземпляре, где каждая строка 8 байтов длиной):

 sed '$!N;s/\n/ /;s/ /\n/9;P;D' file

Прежде всего (записи переменной длины):

fmt -w27 file

Или с GNU sed:

sed 'L27;d' file
0
27.01.2020, 20:49
awk  '{gsub ("00","\n00") ;print $0}' myfile
-1
27.01.2020, 20:49

Теги

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