regex - Perl 中的命令行跨多行

标签 regex perl

这是我在 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/

相关文章:

ruby - 仅匹配 RAR 文件集中第一个文件的正则表达式

javascript - 如何处理模板文字中的无关空白

没有文件扩展名的正则表达式匹配 url

perl - "my"是 Perl 中的函数吗?

perl - system() rsync 与带空格的变量路径

python - 两个字符串之间的正则表达式文本

javascript - 创建一个正则表达式来替换字符串中最后一次出现的字符

Perl:计算大量数据的相关系数时的编程效率

Perl 中 Ruby 的 irb 等价物?

perl - 在 perl 中使用指向文件中行的指针