我想知道是否有可能编写一个100%可靠的sed命令来转义输入字符串中的任何正则表达式元字符,以便它可以在后续的sed命令中使用.像这样:
#!/bin/bash
# Trying to replace one regex by another in an input file with sed
search="/abc\n\t[a-z]\+\([^ ]\)\{2,3\}\3"
replace="/xyz\n\t[0-9]\+\([^ ]\)\{2,3\}\3"
# Sanitize input
search=$(sed 'script to escape' <<< "$search")
replace=$(sed 'script to escape' <<< "$replace")
# Use it in a sed command
sed "s/$search/$replace/" input
Run Code Online (Sandbox Code Playgroud)
我知道有更好的工具可以使用固定字符串而不是模式,例如awk,perl或python.我想证明是否有可能sed.我会说让我们专注于基本的POSIX正则表达式,以获得更多乐趣!:)
我已经尝试了很多东西,但任何时候我都能找到一个打破了我的尝试的输入.我认为保持它是抽象的,因为script to escape不会导致任何人走错方向.
顺便说一下,讨论在这里提出来了.我认为这可能是收集解决方案的好地方,可能会破坏和/或详细说明.
无论如何,在Perl中是通过$ ENV {$ variable}扩展变量吗?
我在外壳程序中导出了“ a = T”和“ T = b”,并运行了Perl脚本,其中打印了“ $ ENV {$ a} \ n”,但没有打印任何内容。我想“ b”可以打印,那我应该在Perl中怎么做?
我希望有一个shell脚本来执行查找和替换,而不使用正则表达式(正则表达式),其中包括所有特殊字符,如!@#$%¨&*()?^〜]} [{' `> <","
因此,例如,函数将能够接收两个参数,其中第一个将是我想要找到的,第二个参数将被替换为.
例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
Run Code Online (Sandbox Code Playgroud)
例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^
Run Code Online (Sandbox Code Playgroud)
param1和param2可以是任何东西.
我需要使用UNIX OS AIX,它可以是使用sed或awk的KornShell(ksh).我不能使用perl或Java.我也无法在这台服务器上安装任何东西.