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

如何删除输入流中首个空字符及之前的所有内容?

解决方案

要实现删除输入流中首个空字符(null)及之前所有内容的需求,你可以用perl来处理,它能直接操作整个输入流(而非按行处理),完美适配你的场景:

echo $'ab012\nab012' | tr '0' '\0' | perl -0777 -ne 's/.*?\0//s; print' | od -An -t uC

命令解释:

  • -0777:让Perl将整个输入流作为单个字符串读取,避免按行分割处理
  • -ne:读取输入并执行后续脚本
  • s/.*?\0//s:用非贪婪模式匹配首个null字符及之前的所有内容,并将其替换为空;s修饰符让.匹配包括换行符在内的所有字符
  • print:输出处理后的剩余内容

执行后你会得到预期的输出:49 50 10 97 98 0 49 50 10,对应1、2、换行符、a、b、空字符、1、2、换行符。

另外也可以用awk实现,写法稍复杂:

echo $'ab012\nab012' | tr '0' '\0' | awk -v RS='\0' 'NR>1{printf "%s%s", prev, $0} {prev=RT}' | od -An -t uC

这里通过设置记录分隔符RS为null,跳过第一个记录(首个null之前的内容),然后将后续记录连同分隔符(RT)一起输出,还原完整的流结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:42