Объединение 3 последовательных строк с обменом

Этот вопрос не относится к Unix -, и его следует задать на сайте crypto.stackexchange.com.

Криптография на основе эллиптических кривых работает иначе, чем RSA. RSA основан на простых числах, ECDSA может использовать любые числа. Это означает, что ключ вдвое большего размера повышает безопасность до степени двойки с ECRSA (160-битный ключ => 2 80-битное пространство для ключей, 320-битный ключ => 2 160-битное пространство для ключей ).. С RSA безопасность повышается медленнее. Делать длинные ключи RSA более безопасными становится все менее и менее эффективным. Другими словами :Вам потребуется больше вычислительной мощности для каждой ценной бумаги с RSA (по крайней мере для длинных ключей ).

4
14.09.2017, 20:39
3 ответа

Да, вы можете использовать sed для замены строк:

$ sed -E 'N;N;s/\n([^\n]*)\n([^\n]*)/ \2 \1/' file
Object Name: A     manual_encdomain: Name: A      comments: comment A
Object Name: B     manual_encdomain: Name: B      comments: comment B

Или, что то же самое:

$ sed  'N;N;s/\n\([^\n]*\)\n\([^\n]*\)/ \2 \1/g' file
Object Name: A     manual_encdomain: Name: A      comments: comment A
Object Name: B     manual_encdomain: Name: B      comments: comment B

Как это работает:

  • -E

    Это включает расширенные регулярные выражения.(-Eработает как на BSD (OSX )sed, так и на современной GNU sed. Для более старых версий GNU sed вместо этого используйте -r.)

    Без расширенного регулярного выражения нам нужно экранировать (и ), как показано выше.

  • N;N

    Это читается во второй и третьей строках.

  • s/\n([^\n]*)\n([^\n]*)/ \2 \1/

    Это поменяет местами вторую и третью строки. Первое вхождение \n([^\n]*)захватывает вторую строку и сохраняет ее в группе захвата 1. Второе вхождение \n([^\n]*)захватывает третью строку и сохраняет ее в группе захвата 2. Текст замены \2 \1меняет позицию при замене новые строки с пробелами.

Удаление лишнего пробела

Во входном файле вторая и третья строки имеют отступ. Если мы хотим удалить эти лишние пробелы:

$ sed -E 'N;N;s/\n[[:blank:]]*([^\n]*)\n[[:blank:]]*([^\n]*)/ \2 \1/g' file
Object Name: A manual_encdomain: Name: A  comments: comment A
Object Name: B manual_encdomain: Name: B  comments: comment B

[[:blank:]]— это безопасный для Unicode -способ сопоставления пробелов и табуляций.

4
27.01.2020, 20:48

с помощью awk:

awk '{line1=$0; getline line2; getline line3; print line1, line3, line2}' file
6
27.01.2020, 20:48

С exиprintf:

printf '%s\n' 'g/^O/+m +2' 'g/^O/j 3' %p | ex file.txt

Измените %pна x, чтобы фактически сохранить изменения, когда вы будете довольны результатом.


g локально, в строках, начинающихся(^)с заглавной O, переместить(m)следующую строку(+)после второй -следующей строки(+2).

Затем глобально в каждой строке, начинающейся с O, соедините три строки вместе.

Распечатать все строки %p.

Или сохраните и выйдите x.

1
27.01.2020, 20:48

Теги

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