我有一个文件,我需要将图像名称中的所有非法字符替换为_
.
非法字符有:~?,[]/\=<>:;'\&$#*()|~`!{}%+
.
图像类型可以是 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 只是用于结束单引号,给出"'"
字面单引号,然后再次开始单引号。