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

使用Bash脚本替换文本文件中的特殊字符

Bash脚本实现多规则文本查找替换

嘿,我来帮你把这些文本替换需求转化成实用的Bash脚本,还给你拆解每个步骤的逻辑——毕竟替换顺序可是关键,搞反了很容易出奇怪的结果!

完整脚本示例

下面是直接能用的脚本,我已经按合理的顺序把你的所有替换规则都整合进去了:

#!/bin/bash

# 检查用户是否提供了输入文件
if [ $# -ne 1 ]; then
    echo "用法: $0 <输入文件路径>"
    echo "示例: ./text_replace.sh my_data.txt > cleaned_data.txt"
    exit 1
fi

input_file="$1"

# 执行一系列替换操作,结果输出到标准输出
sed -e ':a;N;$!ba;s/\n/ /g' \
    -e 's/CP/\n/g' \
    -e 's/Mr. Mime/Mr.Mime/g' \
    -e 's/\t/ /g' \
    -e ':b;s/  / /;tb' \
    -e 's/%//g' \
    -e 's/ ATK DEF STA IV / /g' \
    "$input_file"

替换规则拆解与顺序原因

我特意按逻辑优先级排好了替换顺序,给你逐个解释:

  • 将换行符替换为空格:用':a;N;$!ba;s/\n/ /g'这个技巧,它会把整个文件内容一次性读入缓冲区(避免sed默认逐行处理的限制),然后把所有换行符换成空格。这一步必须放最前面,因为后续很多替换需要处理跨行的内容。
  • 将CP替换为换行符:等所有换行都变成空格后,再把标记性的CP换成换行,这样能重新把文本组织成你需要的行结构。
  • 替换Mr. Mime为Mr.Mime:直接匹配带空格的目标字符串,替换成无空格版本,这一步不依赖其他操作,放在这里刚好。
  • 制表符替换为空格:把所有制表符统一换成空格,方便后续统一处理空格相关的规则。
  • 双空格替换为单空格:用':b;s/ / /;tb'循环替换,直到文本中没有连续的双空格——这比单次替换s/ / /g更彻底,能处理三个甚至更多连续空格的情况。
  • 删除%字符:直接匹配%并替换为空,一次性移除所有该字符。
  • 替换" ATK DEF STA IV "为空格:精准匹配这段固定文本,替换成单个空格,避免残留多余的空白内容。

使用方法

  1. 把上面的代码保存为text_replace.sh文件
  2. 给脚本添加执行权限:chmod +x text_replace.sh
  3. 运行脚本处理文件:./text_replace.sh 你的输入文件名.txt > 清理后文件名.txt(用>把结果输出到新文件,不会修改原文件)

扩展提示

如果后续有更多替换需求,只需要在sed的参数里添加新的-e 's/要查找的内容/替换后的内容/g'即可。比如你要替换XYZ为ABC,就加一行-e 's/XYZ/ABC/g',注意调整顺序——如果新的替换依赖前面的处理结果,就放在对应的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:30:26