使用字节数将一行分为多行

  • 本文关键字:一行 字节数 unix
  • 更新时间 :
  • 英文 :


我想将单行分为多行,每个线8个字节。而且我使用的是fold命令,并且由于该文件包含特殊字符fold命令不起作用,并且它在多键字符的中间断开。

文件内容

あいbbえおかcc髙①こさし㈱㈱ちつて髙aabbc

命令使用

fold -b8 dummy_file.dat

感谢对此的任何帮助。

这里的问题是,如果我们在2行上拆分,您的文本包含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

说明:

您定义一个函数,该函数将计算每个字符有多少个字节。您阅读CHAR stdin的char,并且避免在同一行上具有超过8字节。如果您不想少于每行末端添加一些空格char。

最新更新