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

如何在bash中匹配任意长度空白后完成字符串搜索替换?

问题排查与解决方案

错误原因

你的正则匹配逻辑本身没有问题,出现内容截断的核心原因是shell对命令的解析异常:

  • 如果你实际执行时误将-e后的正则表达式用双引号包裹,首先表达式内部的"会提前闭合shell的双引号边界,导致整个命令结构破碎,perl拿到的执行代码不完整;其次shell会把$1、$2识别为系统内置的位置变量,默认这两个变量是空值,最终执行后就会出现内容丢失,只剩下name 加空格的情况。
  • 少部分情况是源文件中存在不可见的控制字符、或者引号为全角中文引号,导致正则匹配异常。

可用修复命令

Perl 版本(更稳定)

将.*替换为[^"]+做精准匹配,避免贪婪匹配异常,严格使用单引号包裹正则段:

perl -pi -e 's/name(\s+)"([^"]+)"/name$1{ "$2" }/' /tmp/test.txt

Sed 版本(无需依赖perl)

sed -i 's/name\(\s\+\)"\([^"]*\)"/name\1{ "\2" }/' /tmp/test.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:04