【发布时间】:2014-01-24 05:38:56
【问题描述】:
我想要一个 shell 脚本在不使用正则表达式 (regex) 的情况下对任何内容进行查找和替换,其中包括所有特殊字符,例如 !@#$%¨&*()?^~]} [{´`>.
因此,例如,该函数将能够接收两个参数,其中第一个参数是我要查找的参数,第二个参数是要替换的参数。
示例 1:
File1:
BETWEEN TO_DATE('&1','YYYY-MM-DD') +1 and TO_DATE('&2','YYYY-MM-DD') +15
First parameter: TO_DATE('&1','YYYY-MM-DD')
Second parameter: TO_DATE('&1 23:59:59','YYYY-MM-DD HH@$:MI:SS')
File1 after calling the function to replace:
BETWEEN TO_DATE('&1 23:59:59','YYYY-MM-DD HH@$:MI:SS') +1 and TO_DATE('&2','YYYY-MM-DD') +15
示例 2:
File2:
This is just a test/2^
Paramter1: test/2^
Paramter1: testing\$2^]'
File2 after calling the function to replace:
This is just a test/2^
param1 和 param2 可以是任何东西。
我需要使用 UNIX 操作系统 AIX 它可能是使用 sed 或 awk 的 KornShell (ksh)。我不能使用 perl 或 Java。我也无法在此服务器上安装任何东西。
【问题讨论】:
-
您可以尝试使用类似 escape_pattern() 建议 here 的函数的 awk 脚本。看起来您必须根据您的列表增加功能以包含更多要转义的字符。在执行常规 sub()/gsub() 之前,您只需要将参数包装在对类似函数的调用中。
标签: shell unix scripting sed awk