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

如何在bash脚本中用Perl仅去除文件首尾空白且不修改中间内容

Perl 去除文件首尾全局空白(保留中间空白)解决方案

错误原因分析

你对\A/\Z和s修饰符的认知是正确的,问题出在忽略了Perl默认-p参数的逐行处理逻辑:

  • -p参数会逐行读取文件内容到处理变量$_,每次仅处理单行内容,此时\A会被识别为当前处理行的开头,自然会误删所有行的前导空白、破坏中间内容格式。

正确实现方案

要实现全局首尾空白删除,需要先开启Perl的「slurp模式」,一次性将整个文件读入内存再做替换,命令如下:

perl -0777 -pi -e 's/\A\s+|\s+\z//g' sample.txt

参数说明:

  • -0777:将输入记录分隔符设为undef,开启slurp模式,一次性加载整个文件内容到处理变量中,此时\A/\z才能正确匹配整个文件的首尾位置
  • \A\s+:匹配文件最开头的所有空白字符(包含空格、制表符、换行符)
  • \s+\z:匹配文件最末尾的所有空白字符,使用\z比\Z更严谨,会严格匹配文件的最终末尾,不会遗漏最后一个换行符的处理
  • 无需加s修饰符:\s元字符本身就包含换行符\n,可以直接匹配首尾的跨行空白

效果验证

执行上述命令后,文件中间的空行、行前缩进都会完整保留,仅删除文件开头和结尾的全部空白,完全符合预期输出要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:36:06