Как вставлять символы новой строки через каждые N символов в длинную строку [дубликат]

Проблема вызвана тем, что udevd работает не в корневом сетевом пространстве имен (где сетевые адаптеры добавлены по умолчанию).

Кроме того, сетевое пространство имен udevadm monitor также влияет на его вывод.

10
18.12.2018, 23:40
4 ответа

Почтеннаяfoldкоманда («написана Биллом Джоем 28 июня 1977 года» )может переносить строки:

$ printf "foobarzot\n" | fold -w 3
foo
bar
zot

Однако есть некоторые крайние случаи

BUGS Traditional roff(7) output semantics, implemented both by GNU nroff and by mandoc(1), only uses a single backspace for backing up the previous character, even for double-width characters. The fold backspace semantics required by POSIX mishandles such backspace-encoded sequences, breaking lines early. The fmt(1) utility provides similar functionality and does not suffer from that problem, but isn't standardized by POSIX.

поэтому, если в вашем вводе есть символы возврата, вам может потребоваться отфильтровать или удалить их

$ printf "a\bc\bd\be\n" | col -b | fold -w 1
e
$ printf "a\bc\bd\be\n" | tr -d "\b" | fold -w 1
a
c
d
e
20
27.01.2020, 19:59

Мне нравится ответ fold, но на всякий случай с sedвот он:

sed 's/.\{20\}/&\
/g' filename

Вы можете использовать -iдля вставки в -место.

14
27.01.2020, 19:59

Если у вас есть содержимое переменной, например:

var=$(head -n 50 /dev/urandom | tr -dc A-Za-z0-9)

Затем вы можете использовать цикл bash для длины переменной в кусках по 20, распечатывая каждый кусок:

for((start=1;start < ${#var}; start += 20)); do printf '%s\n' "${var:start:20}"; done

Если вы хотите, чтобы они были отдельными переменными, рассмотрите возможность присвоения вывода массиву:

readarray -t passwords < <(for((start=1;start < ${#var}; start += 20)); do printf '%s\n' "${var:start:20}"; done)
3
27.01.2020, 19:59

Вместо того, чтобы tr -dcизбавиться от непечатаемых -символов, я бы просто использовал base64из coreutils:

$ base64 -w20 /dev/urandom | head -8
ckXkWvb0zJknz2zi4fRS
3Jv0dDbKiX8fef7SOfbH
QJySlGUzzhi32wvrGliK
YEiuz6v+EFaRYRMjvnJq
HCXIPiP9wmgONLRqm9uK
iHYwo5xIs8gGjQQEQBeX
8NkL4EkmOAHdmWhGvZYl
AcxD2DaTq2TZRsDL+UMx

Если проблемы с +и /, вы можете заменить их:

$ base64 -w20 /dev/urandom | tr +/ pq | head -8
zr7MgiEr7xBd7h9ihK30
IRNvDuT2H9HsHVq9yFqh
S1cihgfAInjfFspMNXVC
qUUwGErD7nZqtzQtLOo7
DNDp4TVWvHmbEh7HLDGX
GtqqDdEoceY8m5U7FGu0
TvGtTukm6Whr7VHN1mZG
DW5TUH525IA52zLKYACV
1
27.01.2020, 19:59

Теги

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