Вы можете использовать tr
для удаления пробелов и новых строк, например:
openssl rand 16 | tr -d '\n ' > file.txt
Или, если вы действительно плохо запоминаете флаги, вы можете использовать tr
, чтобы преобразовать новые строки в пробелы, а затем использовать sed
, чтобы удалить пробелы.
openssl rand 16 | tr '\n' ' ' | sed 's/ //g' > file.txt
%s
не интерпретирует управляющие последовательности. Вам нужно %b
для этого:
% echo 'tCL\n1523 memo\n' | xargs -0 printf "%b"
tCL
1523 memo
%
Вот что нужно, чтобы делать с awk то, что вы хотите. Учитывая этот ввод:
$ printf '%s\n' 'abc\\ndef\nghi'
abc\\ndef\nghi
Обратите внимание, что первый \n
сам экранирован и поэтому должен рассматриваться буквально как \\n
. Вот как получить ожидаемый результат:
$ printf '%s\n' 'abc\\ndef\nghi' |
awk '{gsub(/@/,"@A"); gsub(/\\\\/,"@B"); gsub(/\\n/,"\n"); gsub(/@B/,"\\\\"); gsub(/@A/,"@")}1'
abc\\ndef
ghi
Если вы хотите интерпретировать и другие управляющие последовательности, например. \t
, вы должны добавить отдельный gsub ()для каждого из них сразу после одного для \n
, например.:
awk '{
gsub(/@/,"@A"); gsub(/\\\\/,"@B")
gsub(/\\n/,"\n")
gsub(/\\t/,"\t")
gsub(/@B/,"\\\\"); gsub(/@A/,"@")
}1'
Эти первые 2 и последние 2 gsub ()создают уникальную строку @B
, сопоставляют \\
пары с ней, чтобы убрать их с пути, а затем сопоставляют их обратно после выполнения предполагаемых преобразований.
Достаточно просто:echo -e "tCL\n1523 memo\n"
Изman echo
:
-e enable interpretation of backslash escapes