unix - 使用字节数将一行拆分为多行
问题描述
我想将单行拆分为多行,每行 8 个字节。而且我正在使用该fold
命令,由于该文件包含特殊字符,因此该fold
命令不起作用,并且它在多字节字符的中间中断。
文件内容
あいbbえおかcc髙①こさし㈱㈱ちつて髙aabbc
使用的命令
fold -b8 dummy_file.dat
感谢您对此的任何帮助。
解决方案
fold
这里的问题是您的文本包含多字节字符,如果我们将它们分成 2 行,这些字符将被命令破坏。
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
有多个字节。8
如果您不想少于可以在每行末尾添加一些空格字符。
推荐阅读
- neo4j - Neo4j 更新效率问题
- python - 将 CSV 转换为 COCO JSON 格式用于边界框标注
- dart - ListView - 卡片(颤动布局)
- python - kivy-ios 使用的枕头在 X-Code 构建期间显示与小 CMS 相关的“未定义符号”错误
- c# - C# 连接和读取智能卡 ACR1281U-C1
- java - obj2=obj1.clone() 对象和 obj1=obj2 有什么区别?
- javascript - 如何让 Chrome 在没有 jQuery 的情况下触发脚本标签上的加载/加载事件
- laravel - 运行 laravel 调度程序的命令时,Windows 任务调度程序上次运行返回 0xff
- html - 如何在按下按钮时开始下载外部图像(AWS 签名 URL)
- firebase - 当我尝试遵循这个 Flutter Firebase 教程时,我得到一个 [] is not defined for Object error in dart?