这是我在 Bash 脚本中的一行 Perl 命令。如何让 s 跨多行更改?
#!/bin/bash
file=$1
echo "processing $file"
perl -0777pe 's/.*<script[ |>].*<\/script>/<script> \.\.\. <\/script>/g' "$file" >"${file}changed.txt"
我正在输入XHTML该脚本中的文件。当开始脚本和结束脚本标记位于同一行时,Perl 命令行可以正常工作。 Perl 在单独的行上找不到开始脚本和结束脚本标记。
正则表达式中的<>有问题吗?
最佳答案
您正在使用-0777
这会吞掉整个文件。现在,您需要做的就是添加 /s
切换到正则表达式,以便任何字符 .
将匹配新行。
您可能还需要将正则表达式更改为非贪婪 .*?
,并且可以通过使用断言和不同的分隔符来简化正则表达式:
#!/bin/bash
file=$1
echo "processing $file"
perl -0777 -pe 's{<script\s*>\K.*?(?=</script>)}{ ... }gs' $file > "${file}changed.txt"
开关:
-
-0777
:吞掉整个文件 -
-p
:创建一个while(<>){...; print}
循环输入文件中的每一“行”。 -
-e
:告诉perl
在命令行上执行代码。
关于regex - Perl 中的命令行跨多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25087919/