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

如何用Bash脚本高效删除文件首尾外层方括号并保留嵌套内容

Bash删除文件外层方括号的实现方案

核心实现命令

直接替换你需要的magicCommand即可,适配绝大多数默认带Perl的Linux/macOS环境:

perl -0777 -pe 's/(.*?)\[/$1/s; s/(.*)\]/$1/s'

命令说明

  • -0777:开启slurp模式,将整个文件内容一次性读入为单个字符串,天然支持跨多行匹配
  • 第一个替换规则s/(.*?)\[/$1/s:非贪婪匹配从文件开头到第一个[的所有内容,保留[之前的所有字符(包括空白、换行),仅删除第一个[;末尾的s修饰符让.可以匹配换行符
  • 第二个替换规则s/(.*)\]/$1/s:贪婪匹配从文件开头到最后一个]的所有内容,保留]之前的所有内容,仅删除最后一个]

特性说明

  • 完全保留第一个[前、最后一个]后的所有空白字符、换行符
  • 内部嵌套的方括号、跨多行内容不会被修改
  • 普通文件场景下处理效率高,无额外依赖

测试验证

测试file1

执行命令:

cat file1 | perl -0777 -pe 's/(.*?)\[/$1/s; s/(.*)\]/$1/s'

输出结果:

Lorem ipsum
  [dolor] sit [amet
  conse] sadip elitr

测试file2

执行命令:

cat file2 | perl -0777 -pe 's/(.*?)\[/$1/s; s/(.*)\]/$1/s'

输出结果:

Lorem ipsum [dolor] sit [amet conse] sadip elitr

可选GNU awk实现(无Perl环境可用)

如果环境中没有Perl,可以用以下awk命令实现相同效果:

awk '{buf = buf $0 ORS} END {
    if (match(buf, /\[/)) buf = substr(buf, 1, RSTART-1) substr(buf, RSTART+1)
    if (match(buf, /.*\]/)) buf = substr(buf, 1, RLENGTH-1) substr(buf, RLENGTH+1)
    printf "%s", buf
}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 15:15:04