首页/新闻资讯/正文详情

Miller 特殊符号与格式化处理实战:逗号、引号、正则转义与字符编码

发布时间:2026/9/25 12:36:42 来源:云帆数科 栏目:资讯中心
Miller 特殊符号与格式化处理实战:逗号、引号、正则转义与字符编码
CLI数据分析【免费下载链接】millerMiller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON项目地址https://gitcode.com/gh_mirrors/mi/miller点击查看免费下载本篇指南聚焦 Miller 在处理特殊符号时的完整套路数据中的逗号如何在不同文件格式间安全流转、字段名含.:/等符号如何引用、字符串中的单引号如何写入 DSL 表达式、正则中的?等元字符如何免转义替换以及 Latin-1 与 UTF-8 编码如何双向转换。读完你可以在 CSV、DKVP、XTAB、JSON 之间自由切换且不丢数据并掌握ssub/gssub/latin1_to_utf8/utf8_to_latin1等函数与latin1-to-utf8/utf8-to-latin1动词的底层原理。数据中的逗号各格式的天然处理差异Miller 对数据本身含逗号的处理能力取决于输出格式CSV 与 JSON 天生支持而 DKVP 与 NIDX 等以逗号作字段分隔符的格式则没有 CSV 式的双引号转义机制至少在 Miller 5.4.0 以来的行为如此需要换分隔符或换格式。先看 CSV 的设计内处理——用双引号包裹即可。样例文件 commas.csv$ cat docs/src/commas.csv Name,Role Xiao, Lin,administrator Khavari, Darius,tester同样的数据转成 JSON逗号作为字符串内容被 JSON 引号原样保留--icsv读入 CSV--ojson输出 JSON$ mlr --icsv --ojson cat docs/src/commas.csv [ { Name: Xiao, Lin, Role: administrator }, { Name: Khavari, Darius, Role: tester } ]Miller 的 XTAB垂直表格式 不支持回车换行的转义但逗号完全没有问题输出可读性也不错$ mlr --icsv --oxtab cat docs/src/commas.csv Name Xiao, Lin Role administrator Name Khavari, Darius Role tester但对 DKVPkey-value-pairs 和 NIDXindex-numbered 这类逗号即字段分隔符的格式而言情况就不同了——逗号在数据里会被当成分隔符$ mlr --icsv --odkvp cat docs/src/commas.csv NameXiao, Lin,Roleadministrator NameKhavari, Darius,Roletester三种应对策略策略一换分隔符。用--ofs指定别的输出字段分隔符例如管道符|$ mlr --icsv --odkvp --ofs pipe cat docs/src/commas.csv NameXiao, Lin|Roleadministrator NameKhavari, Darius|Roletester策略二换格式。DKVPX 格式--dkvpx支持 CSV 式的引号转义键值可以原生包含逗号、等号、换行和引号$ echo a,bx,y,z3 | mlr --dkvpx cat a,bx,y,z3策略三用控制字符当分隔符。想彻底避免数据与分隔符冲突可以使用控制字符——比如 ASCII 控制符\001Ctrl-A。配合cat -v可见^A$ mlr --icsv --odkvp --ofs \001 cat docs/src/commas.csv | cat -v NameXiao, Lin^ARoleadministrator NameKhavari, Darius^ARoletester含特殊符号的字段名花括号引用当字段名本身含有.、:、/等符号时这类名字在 DKVP 输入里很常见DSL 中用花括号{}把整个字段名包起来即可正常读写。例如输入字段名为x.a、y:b、z/c想生成新字段product.all$ echo x.a3,y:b4,z/c5 | mlr put ${product.all} ${x.a} * ${y:b} * ${z/c} x.a3,y:b4,z/c5,product.all60花括号内的点号、冒号、斜杠都会被当作字段名的一部分而不是路径分隔或运算符。这也解释了为什么含标点符号的字段名在 Miller DSL 中无需重命名就能直接参与运算。字符串中的单引号DSL 双引号 Shell 引号拆解Miller DSL 中字符串统一使用双引号因此字符串里放单引号毫无压力真正的麻烦来自 shell 的引号处理。最稳妥的做法是把更新脚本写进文件如 data/single-quote-example.mlr本仓库 docs 源中对应 special-symbols-and-formatting.md 的示例再用-f加载$ echo abcd | mlr put -f docs/src/data/single-quote-example.mlr aIts OK, I said, then for now.脚本内容只有一行$a Its OK, I said, then for now.如果一定要在命令行内联就必须手工拆解 shell 引号——外层单引号用来保护put表达式不被 shell 展开中间需要出现的单引号得跳出外层单引号用\拼接$ echo abcd | mlr put $aIt\s OK, I said, \for now\. aIts OK, I said, for now.拼接的七个片段分别是$aIt\s OK, I said,\for now\.。换句话说\在 shell 眼中 结束单引号 转义单引号 重新开始单引号最终把字面传进 Miller。这正是把脚本放进文件更省心的原因。正则元字符的转义[?]与ssub/gssub两条路处理?、.、*这类正则元字符时可以用方括号把字符去特殊化也可以干脆放弃正则、改用纯字符串替换。样例文件 docs/src/data/question.dat即ais it?,bit is!方式一正则 字符类。gsub中把?写成[?]$ mlr --oxtab put $c gsub($a, [?], ...) docs/src/data/question.dat a is it? b it is! c is it ...方式二纯字符串替换。ssub替换第一处完全不解释正则、不做转义$ mlr --oxtab put $c ssub($a, ?, ...) docs/src/data/question.dat a is it? b it is! c is it ...源码层面ssub与gssub在 pkg/bifs/regex.go 中共享bif_ssub_gssub实现底层是 Go 标准库strings.Replace/strings.ReplaceAll——注释明确写着 no-frills string-replace, no regexes, no escape sequences。这解释了为什么 参考文档 强调这两个函数存在就是为了让你什么都不用转义ssub只替换首个匹配gssub全局替换。Latin-1 与 UTF-8 编码转换Go 的regexp库Miller 的正则引擎要求字符串必须是 UTF-8因此处理 Latin-1即 ISO/IEC 8859-1文本时ssub/gssub这类纯字符串操作反而比sub/gsub更合适。典型场景是字节级转码把字符串里的\xf0、\xed、\xde等单字节序列逐个替换成对应的 Unicode 码点\u00f0、\u00ed、\u00de$ mlr -n put end { name Ka\xf0l\xedn og \xdeormundr; name gssub(name, \xde, \u00de); name gssub(name, \xf0, \u00f0); name gssub(name, \xed, \u00ed); print name; } Kaðlín og Þormundr不过更系统的做法是使用专门的内置能力DSL 函数latin1_to_utf8与utf8_to_latin1字段级粒度动词latin1-to-utf8与utf8-to-latin1全记录处理更少按键。两者的实现都在 pkg/bifs/strings.go转码失败例如把西里尔字母从 UTF-8 转回 Latin-1时返回错误值而非静默破坏数据底层字节级转换逻辑见 pkg/lib/latin1.go。动词侧的latin1-to-utf8定义于 pkg/transformers/latin1_to_utf8.go其使用帮助还提示需要字段级控制请看latin1_to_utf8DSL 函数。下面两张截图展示了真实运行结果。第一张是各输入都能从 Latin-1 转成 UTF-8因为 Latin-1 本身包含德文字符第二张中英文与德文全字母句可以从 UTF-8 转回 Latin-1但俄文不行——Latin-1 不含俄文字母表对正则捕获组做数学运算正则匹配得到的捕获组都是字符串要参与计算必须先显式转型为int或float。经典场景是度分转十进制度数用圆括号写捕获组用\1、\2引用再float()转换后运算$ echo a14°45 | mlr put $a ~^([0-9])°([0-9]) {$degrees float(\1) float(\2) / 60} a14°45,degrees14.75这里\1捕获14、\2捕获45float(\1)得到 14.045/60得 0.75合起来 14.75。关于捕获组、\1-\9引用及正则匹配的更多细节可参考 正则表达式专题文档 与 DSL 内置函数参考。小结问题推荐方案关键命令/函数数据含逗号输出 DKVP/NIDX换分隔符 / 换 DKVPX / 用控制符--ofs pipe、--dkvpx、--ofs \001字段名含.:/等符号花括号包住字段名mlr put ${field.name} ...字符串里要放单引号脚本文件 DSL 双引号内联则拆 shell 引号mlr put -f file.mlr正则元字符想免转义纯字符串替换ssub/gssubLatin-1 与 UTF-8 互转字段级函数或全记录动词latin1_to_utf8/latin1-to-utf8等对正则捕获做数学运算捕获组 显式转型float(\1) float(\2) / 60以上所有示例均可在当前仓库内验证样例输入见 docs/src/commas.csv 与 docs/src/data/question.dat实现证据见 pkg/bifs/regex.go、pkg/bifs/strings.go 与 pkg/transformers/latin1_to_utf8.go。赞分享CLI数据分析【免费下载链接】millerMiller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON项目地址https://gitcode.com/gh_mirrors/mi/miller点击查看免费下载相关推荐Yesod认证系统完全指南从基础认证到OAuth集成Yesod认证系统完全指南从基础认证到OAuth集成 Yesod认证系统是Haskell Web框架Yesod的核心组件提供了完整的用户身份验证解决方案。本learn-regex转义字符正确处理特殊符号的终极指南learn regex转义字符正确处理特殊符号的终极指南 正则表达式是一种强大的文本处理工具但特殊符号的处理常常让新手感到困惑。 learn regex 项教程学习正则表达式表情符号Emoji和特殊符号的完整处理指南学习正则表达式表情符号Emoji和特殊符号的完整处理指南 正则表达式是处理文本的强大工具但在面对表情符号和特殊符号时很多开发者都会感到困惑。 本文将为教程上一篇R3nzSkin国服换肤工具免费解锁英雄联盟所有皮肤的秘密武器下一篇3分钟为Windows 11 LTSC系统安装Microsoft Store的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Comet OJ Contest #9  X Round 3 赛后复盘:用 TaoToken 统一 Key 跑通本地评测脚本
Comet OJ Contest #9 X Round 3 赛后复盘:用 TaoToken 统一 Key 跑通本地评测脚本

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 12:36:29

SQL Assessment API 数据变换(Data Transformation)深入解析:aggregate、parse、performance 等 9 种 Morph 变换实战指南
SQL Assessment API 数据变换(Data Transformation)深入解析:aggregate、parse、performance 等 9 种 Morph 变换实战指南

示例工程数据库教程后端 【免费下载链接】sql-server-samples Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge 项目地址: https://gitcode.com/gh_mirrors… · 2026/9/25 12:36:29

基于 PaddleSeg MedicalSeg 的 COVID-19 肺部 CT 三维分割实战:VNet 全流程指南
基于 PaddleSeg MedicalSeg 的 COVID-19 肺部 CT 三维分割实战:VNet 全流程指南

人工智能计算机视觉预训练 【免费下载链接】PaddleSeg Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting,… · 2026/9/25 12:36:29

从SQL注入到系统权限:读数据、写文件、执行命令全解析
从SQL注入到系统权限:读数据、写文件、执行命令全解析

1. 从注入点到系统权限:SQL注入利用的三个阶段很多人学SQL注入,停留在 or 11--这种万能密码绕过或者union select拖个数据库就完事了。但实际上,一个注入点能做到的事情远不止"把数据拿出来"这么简单——只要权限够、条件允许&… · 2026/9/25 13:25:42

Codex CLI 的 Git 工作流:AI 帮你管理 Commit 和分支
Codex CLI 的 Git 工作流:AI 帮你管理 Commit 和分支

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 13:25:42

Less-24二次注入实战:从注册到改密,一次搞懂SQL注入的隐藏玩法
Less-24二次注入实战:从注册到改密,一次搞懂SQL注入的隐藏玩法

1. 拿到Less-24先别急着跑,这关考的是思路sqli-labs刷到Less-24,很多新手会卡一下。前23关大部分是“参数拼进SQL导致报错、盲注、布尔、时间盲注”这种直来直去的路子,到了这一关突然变了个玩法:页面干干净净,登录框摆… · 2026/9/25 13:25:36

AWD自动化攻击框架全解析:从漏洞利用到flag批量提交的实战指南
AWD自动化攻击框架全解析:从漏洞利用到flag批量提交的实战指南

简介:面向AWD攻防对抗赛选手的自动化攻击框架完整源码包,含项目说明与模块化代码,适合具备Python基础和熟悉CTF/AWD赛制的竞赛选手作为实战模板。压缩包共66个文件,以Python源码(py与pyc)为主,辅… · 2026/9/25 13:25:36

Gh0st远控源码VS2019编译实战:从解压到跑通上线的完整指南
Gh0st远控源码VS2019编译实战:从解压到跑通上线的完整指南

简介:面向远程控制技术学习与二次开发场景的 Gh0st 远控 VS2019 完整工程包,2025 年首发版本,整合了当前 Visual Studio 2019 的开发环境配置,让使用者能在熟悉的 IDE 中直接查看、编译和调试远程控制客户端/服务端代码。压缩包共… · 2026/9/25 13:25:36

威胁情报与恶意样本分析:常用样本库及批量获取流程
威胁情报与恶意样本分析:常用样本库及批量获取流程

搞威胁情报和恶意样本分析的朋友,应该都有过这种经历:一篇分析报告写到一半,发现手头缺一个关键样本,或者想对比某个APT组织最近在用的攻击手法,却不知道该去哪里拉数据。我入这行头两年,就是靠几个书签攒了… · 2026/9/25 13:25:36

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码