Недавно я установил последнюю версию cygwin. «openssl» начал выдавать предупреждение:
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
Итак, теперь я использую для шифрования следующее:
openssl aes-256-cbc -salt -pbkdf2 -in name -out name.aes
и следующее для расшифровки:
openssl aes-256-cbc -d -salt -pbkdf2 -in name.aes -out name
sed 's|\\\\\\|\n|g' filename
делает это, если вы используете GNU sed
.
Если вы хотите POSIX sed
, то это должно работать (довольно много экранирования!):
sed 's|\\\\\\|\
|g' filename
Просто другой подход, предполагающий, что в файле нет других шаблонов, подобных этому, с использованием GNUsed
:
sed -E 's;([0-9]{4}).{3};\1\n;g' < file
Я бы использовал здесь Perl, так как он имеет более продвинутые регулярные выражения, которые могут легко поддерживать повторение. Итак, что-то вроде этого:
$ perl -pe 's/\\{3}/\n/g' file
20~02~19~05-01-52
2249
2249
2249
2249
2249
2249
2248
-pe
означает «печатать каждую строку ввода после применения к ней сценария, заданного -e». Сам сценарий просто заменяет каждое вхождение ровно 3 \
новой строкой. Нам нужно \\
вместо \
, потому что \
нужно экранировать.
Если ваш sed
поддерживает (GNU sed ), вы можете использовать тот же подход:
$ sed -E 's/\\{3}/\n/g' file
20~02~19~05-01-52
2249
2249
2249
2249
2249
2249
2248
Использование sed:sed -n 's/\\\\\\/\n/g; p' filename.txt
.
Важно, чтобы после точки с запятой была буква «p», иначе не будет напечатана первая строка, в которой не происходит подстановки. 6 обратных косых черт, потому что 3 обратных косых черты используются в качестве escape-символов для 3 обратных косых черт, которые у вас есть. 'g' для глобального. ' -n', чтобы избежать автоматической печати.
Я переписал код, который получает последовательные данные, и использовал следующее для генерировать перевод строки. Большое спасибо за посты. Это заставит меня учиться какое-то время.
sed -i 's/\\n/\n/g' *.txt