用文本文件中的字符串替换非法字符

用文本文件中的字符串替换非法字符

我有一个文件,我需要将图像名称中的所有非法字符替换为_.

非法字符有:~?,[]/\=<>:;'\&$#*()|~`!{}%+.

图像类型可以是 jpg、png 或 gif。

图像名称中包含非法字符的文本的示例可能是

INSERT INTO wp_2_cptch_images VALUES (1,'hs$x#f.png',2,0),(2,'t_ixy.png',2,1),(3,'#.png',2,2),(4,'!sample.png',2,3)

在上面的例子中我希望看到

INSERT INTO wp_2_cptch_images VALUES (1,'hs_x_f.png',2,0),(2,'t_ixy.png',2,1),(3,'_.png',2,2),(4,'_sample.png',2,3)

不属于图像名称一部分的非法字符是可以的。

我真的不知道如何解决这个问题,任何帮助将不胜感激。

答案1

您似乎正在尝试手动过滤 SQL 查询。这一般是一个馊主意™,如果是这种情况,您应该使用准备好的语句。

也可能是您收到了一堆您希望清理的 SQL 命令。不要这样做。这类似于被要求解决这个问题:不开心的电脑

而不是设计一个容错电源。这在技术上是可行的,但可能不是您应该开始的地方。您将尝试设计一个自动化系统来确定命令的意图,这将是人工智能的结果,而不是 bash 管道的结果。

如果您有所有文件名的列表,并且希望使用 bash 工具清理它们,则可以使用tr

cat original.txt | tr '~?,[]/\=<>:;'"'"'\&$#*()|~`!{}%+' - > modified.txt

jiggery '"'"'-pokery 只是用于结束单引号,给出"'"字面单引号,然后再次开始单引号。

相关内容