You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sed替换单字节文件中十六进制换行符无效,求解决思路

解决sed替换换行字节无效的问题

问题原因

sed是按行处理文本的工具,默认将\x0a(换行符)作为行分隔符。读取内容时,sed会自动剥离每行末尾的换行符,处理完成后再重新添加换行符输出。这就导致你的替换规则s/\x0a/\x25/g找不到匹配目标——sed处理的内容里已经没有换行符了。

解决思路

1. 使用tr命令(最推荐,简单直接)

tr是专门的字符转换工具,直接处理字节流,不会忽略换行符:

# 先转存到临时文件再替换原文件
tr '\x0a' '\x25' < saut-de-ligne_UTF-8 > temp_file && mv temp_file saut-de-ligne_UTF-8

# 若系统安装了moreutils包,可直接原地修改
tr '\x0a' '\x25' < saut-de-ligne_UTF-8 | sponge saut-de-ligne_UTF-8

2. 使用GNU sed的-z选项

GNU sed支持-z参数,将NUL字符作为行分隔符,这样整个文件会被当作单行读取,换行符会保留在处理内容中:

sed -z -i 's/\x0a/\x25/g' saut-de-ligne_UTF-8

注意:该特性仅GNU sed支持,BSD sed等其他版本无法使用。

3. 使用awk处理

通过设置记录分隔符(RS)为一个不会出现的字符(比如NUL),让awk把整个文件当作一个记录,即可匹配换行符:

awk -v RS='\x00' '{gsub(/\x0a/,"\x25"); print}' saut-de-ligne_UTF-8 > temp_file && mv temp_file saut-de-ligne_UTF-8

4. 使用perl处理

perl支持直接处理字节流并原地修改文件:

perl -pi -e 's/\x0a/\x25/g' saut-de-ligne_UTF-8

内容的提问来源于stack exchange,提问作者user10165777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:12:46