如何使用sed将多文件内的单列垂直数据转为逗号分隔格式且不新建文件
问题原因与解决方案
原命令失效原因
sed 默认采用逐行读取的处理逻辑,读取每行时会自动移除末尾的换行符\n后再执行模式匹配,因此你写的s/\n//g规则无法匹配到任何目标字符,自然达不到拼接效果。
可用实现命令
1. Linux 环境(GNU Sed 适用)
直接执行以下命令即可原地修改demo目录下所有目标文件:
sed -i -z 's/\n/,/g;s/,$//' demo/*
参数说明:
-i:开启原地修改模式,直接改动原文件,无额外生成文件-z:修改行分隔符为NUL字符,一次性读取完整文件内容,保留所有原始换行符用于匹配替换s/\n/,/g:全局替换所有换行符为逗号s/,$//:删除末尾多余的逗号(原文件最后一行默认带换行符,替换后会在末尾多出一个逗号,该规则用于清除冗余字符)
2. macOS 环境(BSD Sed 适用)
BSD Sed 的-i参数要求显式指定备份文件后缀,传入空字符串表示不生成备份:
sed -i '' -z 's/\n/,/g;s/,$//' demo/*
注意事项
- 路径大小写敏感,请注意区分
demo和Demo的路径拼写 - 如果你只需要处理带后缀的文件,可以将通配符改为
demo/*.*,当前写法默认处理demo目录下所有普通文件
内容的提问来源于stack exchange,提问作者user17086826
相关产品推荐
相关产品推荐

