sed заменяет '\\\' на новую строку Linux

Недавно я установил последнюю версию 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
6
19.02.2020, 15:23
7 ответов

sed 's|\\\\\\|\n|g' filenameделает это, если вы используете GNU sed.

Если вы хотите POSIX sed, то это должно работать (довольно много экранирования!):

sed 's|\\\\\\|\
|g' filename
13
28.04.2021, 23:22

Просто другой подход, предполагающий, что в файле нет других шаблонов, подобных этому, с использованием GNUsed:

sed -E 's;([0-9]{4}).{3};\1\n;g' < file
0
28.04.2021, 23:22

Я бы использовал здесь 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
8
28.04.2021, 23:22

Сawk:

awk '{gsub(/\\{3}/, RS)}1' file
4
28.04.2021, 23:22
  • zsh
printf '%s\n' ${(s:\\\:)"$(<FILE)"}
2
28.04.2021, 23:22

Использование sed:sed -n 's/\\\\\\/\n/g; p' filename.txt.

Важно, чтобы после точки с запятой была буква «p», иначе не будет напечатана первая строка, в которой не происходит подстановки. 6 обратных косых черт, потому что 3 обратных косых черты используются в качестве escape-символов для 3 обратных косых черт, которые у вас есть. 'g' для глобального. ' -n', чтобы избежать автоматической печати.

2
28.04.2021, 23:22

Я переписал код, который получает последовательные данные, и использовал следующее для генерировать перевод строки. Большое спасибо за посты. Это заставит меня учиться какое-то время.

sed  -i 's/\\n/\n/g' *.txt
0
28.04.2021, 23:22

Теги

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