使用常见的 bash 工具作为 shell 脚本的一部分,我想每隔 N 个字符重复插入一个换行符('\n')到一个长字符串中。
例如,给定这个字符串,我如何每 20 个字符插入一个换行符?
head -n 50 /dev/urandom | tr -dc A-Za-z0-9
我试图达到的结果示例:
ZL1WEV72TTO0S83LP2I2
MTQ8DEIU3GSSYJOI9CFE
6GEPWUPCBBHLWNA4M28D
P2DHDI1L2JQIZJL0ACFV
UDYEK7HN7HQY4E2U6VFC
RH68ZZJGMSSC5YLHO0KZ
94LMELDIN1BAXQKTNSMH
0DXLM7B5966UEFGZENLZ
4917Y741L2WRTG5ACFGQ
GRVDVT3CYOLYKNT2ZYUJ
EAVN1EY4O161VTW1P3OY
Q17T24S7S9BDG1RMKGBX
WOZSI4D35U81P68NF5SB
HH7AOYHV2TWQP27A40QC
QW5N4JDK5001EAQXF41N
FKH3Q5GOQZ54HZG2FFZS
Q89KGMQZ46YBW3GVROYH
AIBOU8NFM39RYP1XBLQM
YLG8SSIW6J6XG6UJEKXO
一个用例是快速制作一组随机密码或固定长度的 ID。我做上面例子的方式是:
for i in {1..30}; do head /dev/random | tr -dc A-Z0-9 | head -c 20 ; echo ''; done
但是,出于学习目的,我想以不同的方式进行。我想从一个任意长的字符串开始并插入换行符,从而将一个字符串分成多个固定字符长度的小字符串。
古老的
fold
命令(“由 Bill Joy 于 1977 年 6 月 28 日编写”)可以换行:但是,有一些边缘情况
因此,如果您的输入有退格字符,您可能需要过滤或删除那些
我喜欢这个
fold
答案,但以防万一你想要sed
,这里是:您可以
-i
用于就地插入。如果变量中有内容,例如:
然后你可以在变量的长度上使用 bash 循环,以 20 个块为单位,打印出每个块:
如果您希望它们作为单个变量,请考虑将输出分配给数组:
而不是做那
tr -dc
件事来摆脱不可打印的字符,我只会使用base64
coreutils:如果
+
and/
有问题,您可以更换它们: