Regex unix命令行中复杂的查找和替换
我试图使用中提供的答案,通过unix命令行在所有文件中执行复杂的查找和替换,但似乎无法正确转义查找和替换字符串 我需要找到包含以下内容的所有行:Regex unix命令行中复杂的查找和替换,regex,perl,unix,command-line,command,Regex,Perl,Unix,Command Line,Command,我试图使用中提供的答案,通过unix命令行在所有文件中执行复杂的查找和替换,但似乎无法正确转义查找和替换字符串 我需要找到包含以下内容的所有行: if ($session['test']>0){ 并将其替换为 if ($session['test']>1){ 我正在尝试的命令是: find . -name '*.php' |xargs perl -pi -e 's/if\(\$session\[\'test\'\]\>0\){/if\(\$session\[\'test\'
if ($session['test']>0){
并将其替换为
if ($session['test']>1){
我正在尝试的命令是:
find . -name '*.php' |xargs perl -pi -e 's/if\(\$session\[\'test\'\]\>0\){/if\(\$session\[\'test\'\]\>1\){/g'
但这给了我另一个提示,要求我输入一个额外的“
字符,因为命令告诉我有一个字符串缺少终止符。如果我在末尾将其放入额外的”
,我会得到:
Unmatched ) in regex; marked by <-- HERE in m/if\(\$session\[\test']>0) <-- HERE {/ at -e line 1.
正则表达式中的
不匹配);标记为只需使用双引号:
perl -pi -e "s/if\(\$session\[\'test\'\]\>0\){/if\(\$session\[\'test\'\]\>1\){/g"
此外,如果
,则在之后缺少一个空格,美元符号需要用三个反斜杠转义:
perl -pi -e "s/if \(\\\$session\[\'test\'\]\>0\){/if \(\\\$session\[\'test\'\]\>1\){/g"
^ ^^^ ^^^
只需使用双引号:
perl -pi -e "s/if\(\$session\[\'test\'\]\>0\){/if\(\$session\[\'test\'\]\>1\){/g"
此外,如果
,则在之后缺少一个空格,美元符号需要用三个反斜杠转义:
perl -pi -e "s/if \(\\\$session\[\'test\'\]\>0\){/if \(\\\$session\[\'test\'\]\>1\){/g"
^ ^^^ ^^^
使用双引号和双转义$
可以:
perl -pi -e "s/if \(\\\$session\['text'\]>0\){/if (\\\$session['text']>1){/"
一个更短但更脏的解决方案,具有向后看和向前看的断言:
perl -pi -e 's/(?<=if \(\$session\[.text.\]>)0(?=\){)/1/'
perl-pi-e's/(?)0(?=\){)/1/'
使用双引号和双转义$
可以:
perl -pi -e "s/if \(\\\$session\['text'\]>0\){/if (\\\$session['text']>1){/"
一个更短但更脏的解决方案,具有向后看和向前看的断言:
perl -pi -e 's/(?<=if \(\$session\[.text.\]>)0(?=\){)/1/'
perl-pi-e's/(?)0(?=\){)/1/'
命令不会“思考”。它们知道。当shell插值出现问题时,只需使用一个文件保存正则表达式并运行xargs perl-pi file.pl
命令不会“思考”。他们知道。当shell插值是一个问题时,只需使用一个文件来保存regex并运行xargs perl-pi file.pl
,使用双引号会成功运行命令,但无法实现我想要的替换。使用双引号会成功运行命令,但无法实现我想要的替换。