我想将单行拆分为每行8个字节的多行。我正在使用fold
命令,由于此文件包含特殊字符,因此fold
命令无效,并且在多字节字符中间中断。
あいbbえおかcc髙①こさし㈱㈱ちつて髙aabbc
fold -b8 dummy_file.dat
对此表示感谢。
答案 0 :(得分:0)
这里的问题是,如果我们将文本分成两行,则您的文本包含多字节字符,这些字符将被fold
命令破坏。
echo "あいbbえおかcc髙①こさし㈱㈱ちつて髙aabbc" | fold -b8
あいbb
えお��
�cc髙��
�こさ�
��㈱㈱
ちつ��
�髙aabb
c
如果您希望每行包含8个字符,则可以使用以下sed
命令:
echo "あいbbえおかcc髙①こさし㈱㈱ちつて髙aabbc" | sed 's/.\{8\}/&\n/g'
あいbbえおかc
c髙①こさし㈱㈱
ちつて髙aabb
c
在每次8
个字符出现后添加一个换行符。
如果您不想显示8个字符,但希望在不破坏文本内容的情况下将每一行限制为最多8个字节,则可以使用python脚本:
import sys
def utf8len(s):
return len(s.encode('utf-8'))
entry = unicode(sys.stdin.read(),'utf-8')
tmp = ''
for c in entry:
if utf8len(tmp)+utf8len(c) > 8:
print tmp
tmp = c
elif utf8len(tmp)+utf8len(c) == 8:
print tmp,c
tmp = ''
else:
tmp += c
if tmp:
print tmp
输出:
echo -n "あいbbえおかcc髙①こさし㈱㈱ちつて髙aabbc" | python max8bytes.py
あいb b
えお
かcc 髙
①こ
さし
㈱㈱
ちつ
て髙a a
bbc
说明:
您定义了一个函数,该函数将计算每个字符有多少字节。
您按字符stdin
读取char,并且避免在同一行上包含超过8
个字节。如果不希望少于,可以在每行末尾添加一些char。