求推荐一款能按照对换表进行批量替换的文本替换软件

对换表类似

1111=aaaa
2222=bbbb
3333=cccc

或其他相近格式的txt,或干脆就是个 excel 表

然后直接调用这个表进行文本文件批量替换的软件

1 个赞

可以借助 busybox-w32 + sed + awk 来完成。

为了表述方便,本文作如下约定:

  • replace.sh 是脚本文件
  • list.csv 是文字对换表

处理单个文件,可用这个脚本:

#!/bin/sh

FILE=$1
L=1
E=`awk 'END {print NR}' list.csv`

while [ $L -le $E ]
do
    A="`awk -F ',' -v L=$L 'NR==L {print $1}' list.csv`"
    B="`awk -F ',' -v L=$L 'NR==L {print $2}' list.csv`"
    sed -i "s/$A/$B/g" "$FILE"
    unix2dos "$FILE"
    L=$(($L+1))
done

将上述内容保存为脚本文件 replace.sh

对换表保存在 list.csv 文档中,第一列为原始文本,第二列为替换文本。比如:

111,AAA
222,BBB

假设原始文本内容为 “测试内容111和测试内容222.”,替换后为 “测试内容AAA和测试内容BBB.”。

然后,下载 busybox-w32,将 busybox.exe 复制到 X:\Windows\ (X 为系统盘盘符) 目录下,在CMD中执行如下命令启动脚本:

busybox ash ./replace.sh ./1.txt

其中,1.txt 是要处理的文本(文件扩展名无所谓,只要是纯文本文件即可)。注意该方法会直接将修改写入原文件,且不可撤销,使用前要注意备份原文件。


如要处理大量文本文件,请将 list.csv 和所有要处理的文本文档放在同一目录下,然后在该目录下创建脚本文件 replace.sh 并写入如下命令:

#!/bin/sh

for FILE in *.txt
do
    L=1
    E=`awk 'END {print NR}' list.csv`

    while [ $L -le $E ]
    do
        A="`awk -F ',' -v L=$L 'NR==L {print $1}' list.csv`"
        B="`awk -F ',' -v L=$L 'NR==L {print $2}' list.csv`"
        sed -i "s/$A/$B/g" "$FILE"
        unix2dos "$FILE"
        L=$(($L+1))
    done
done

到 CMD 中执行如下命令:

busybox ash ./replace.sh
1 个赞

楼主可以考虑 EmEditor ,如下图操作:

不过我看了一下官网,
似乎只有专业版才有这个功能,
免费版没有……
所以你或许可以考虑找个专业版试一试,
然后再决定是否入正版~
https://zh-cn.emeditor.com/text-editor-features/history/emeditor-free/

1 个赞

这个是处理文件名吧,我需要处理的是文本文件里的内容

不错,就是替换表编辑起来略麻烦,留作备用 :grinning:

感谢,就是我要得功能~

quicker可以,不过需要自己制作动作

嗷嗷,脑子抽了,
文件批量替换的话,这个特别好用,支持正则、特征和普通模式:
超级批量修改工具-YEStudio


作一点补充说明:

  1. sed 支持正则表达式,所以之前提到的对照表 list.csv 里面可以写入正则表达式,如在其中加入 [0-9],X 可以将文档中的所有阿拉伯数字替换为 X
  2. 上述脚本中,awk 命令后的 -F 选项可以指定分隔符。如果替换列表中使用了其他分隔符,请作相应的替换。如:对照表中为 X=Y 的形式,则可将 awk -F ',' 替换为 awk -F '='
  3. 如在 UNIX 系统或 Linux 系统上使用该脚本,可去掉 unix2dos $FILE 命令。

参考资料:

1 个赞

Excel和TXT 可以用SoSo工具集11中的批量替换的功能

image

这个以前我都在用,不知道为啥现在在我 win10 上显示了两个错误就打不开了 :sob:

截图-001

截图-002

呃,你试试下载别的下载站的看看?
我是在东坡下载站下载的

如果不用正则,直接使用字典替换文本,最通用的办法是上opencc

1 个赞

对啊,这倒是我从来没想到的用法,opencc 的确可以用来批量替换文本
以前只是用来简繁替换,果然还是我脑洞不够 :frowning_face:

opencc 不适合小白——普通的繁简转换都不一定会用,更何况还要自定义词汇表。对小白来说,还是现成的GUI软件省心。

感谢各位大佬提醒,的确 opencc 也是一个很好的方法。

Windows 上安装 opencc 可以参考这篇文章:

Linux上的话,一般软件源里面应该就有。以Ubuntu为例:sudo apt install opencc

然后,准备两个文件:

  • 配置文件 replace.json
  • 字典文件 dict.txt

配置文件按如下格式书写:

{
  "name": "Just for test",
  "segmentation": {
    "type": "mmseg",
    "dict": {
      "type": "text",
      "file": "dict.txt"
    }
  },
  "conversion_chain": [{
    "dict": {
      "type": "group",
      "dicts": [{
        "type": "text",
        "file": "dict.txt"
      }]
    }
  }]
}

其中,dict.txt 是我们一会儿要用到的对换表。

对换表文件 dict.txt 按如下格式书写:

原始字段[制表符]替换字段

注意 “原始字段” 和 “替换字段” 之间要用制表符分隔,不要用空格。

replace.jsondict.txt 放在同一文件夹下,然后打开命令行,执行转换命令:

opencc -i 输入文件 -o 输出文件 -c replace.json

其中,“输入文件” 和 “输出文件” 可以是同一文件,这样就可以直接修改输入文件的内容了。

如果是要处理大量文件,在WIndows系统上,可以写一个批处理文件:

@echo off

for %%i in (*.txt) do opencc -i "%%i" -o "%%i_output".txt -c replace.json

如果想直接修改原文件,则可使用这个批处理:

@echo off

for %%i in (*.txt) do opencc -i "%%i" -o "%%i" -c replace.json

opencc 还可以接收来自其他程序的标准输出,比如要对某程序的输出结果进行替换,可执行:

cat text.txt | opencc -c replace.json

说句题外话,如果只是要进行简繁转换,执行如下命令即可:

  • 简体到繁体:opencc -i 输入文件 -o 输出文件 -c s2t
  • 繁体到简体:opencc -i 输入文件 -o 输出文件 -c t2s

更多功能可参考其项目主页:https://github.com/BYVoid/OpenCC/

新鮮出爐!肝了兩日,搞了一個在線批量正則替換頁面

這應是對小白來說最簡單的方式了,以後我自己也會去用它。手機上都可以使用。之前我是用手機上的vim,雖然也能搞,但麻煩很多。

希望可以選為答案!

3 个赞

加了個常見RegExp,各位有任何文本處理的問題也可以留言,我會儘量回覆。

真不错,又多一种方法。感谢感谢,网址收藏了 :smiley:

1 个赞

正巧我平時也很需要這個,我之前一直都用的是vim,sed偶爾用。還有akelpad等文本編輯器的正則匹配功能也都已經夠用了。但是都沒有我做的這個方便快捷。