Regex 使用正则表达式替换字符串时出错

Regex 使用正则表达式替换字符串时出错,regex,perl,shell,replace,Regex,Perl,Shell,Replace,我有多个jsp文件,为了避免XSS,我想在其中执行类似的操作。基本上使用JSTL来转义“值” //将以下行更改为使用c:out 这是我试图从终端使用的脚本,用于对文件夹中的一个文件进行这些更改 find . -type f -name "*.jsp" | xargs perl -i -p -e 's|" value=("\${.*}"?)|" value="<c:out value=\1/>"|' find-键入f-name“*.jsp”| xargs perl-i-p-e's

我有多个jsp文件,为了避免XSS,我想在其中执行类似的操作。基本上使用JSTL来转义“值”

//将以下行更改为使用c:out
这是我试图从终端使用的脚本,用于对文件夹中的一个文件进行这些更改

find . -type f -name "*.jsp" | xargs perl -i -p -e 's|" value=("\${.*}"?)|" value="<c:out value=\1/>"|'
find-键入f-name“*.jsp”| xargs perl-i-p-e's |“value=(“\${.*}”)|“value=”“|”

这实质上是寻找任何.jsp文件,然后在输出上循环abd,替换上面提到的文本。我不太确定出了什么问题,但我没有看到对文件的任何更改。如果有任何帮助,我们将不胜感激。

您不需要使用perl和xargs,您只能使用sed执行此任务:

find . -type f -name "*.jsp" -exec sed -i 's#\(value="\)\(\${[^}]*}\)"#\1<c:out \1\2/>"#g' {} \;
find-键入f-name“*.jsp”-exec sed-i的#\(value=“\)\(\${[^}]*}\)“#\1”#g'{}\;

使用perl对这项任务来说太过分了,sed可以完成这项工作。我尝试了你的脚本,它对我有效(perl v5.20.2)。谢谢你的评论。它实际上运行得很好,但正则表达式中的空格before值有问题。无论如何,谢谢!谢谢,这非常好!
find . -type f -name "*.jsp" -exec sed -i 's#\(value="\)\(\${[^}]*}\)"#\1<c:out \1\2/>"#g' {} \;