【发布时间】:2013-12-01 03:27:46
【问题描述】:
我正在尝试使用 perl 操作文件中的多行 CoffeeScript cmets。这是我的正则表达式:
^\t*###[\S\s]*?^\t*###
当我在 data 是文件数据的脚本中运行它时,它会按照我的预期执行并将所有多行 cmets 替换为“foo”:
$data =~ s{^\t*###[\S\s]*?^\t*###}{"foo"}gme;
但是,当我在命令行上运行它时,文件没有改变:
perl -pi -e 's{^\t*###[\S\s]*?^\t*###}{"foo"}gme' file.coffee
我使用了具有不同正则表达式且没有“m”选项的类似命令,它们都可以工作。是导致问题的 m 选项吗?我敢肯定这很简单。
【问题讨论】:
-
我很好奇文件系统是否将
\t作为文字标签字符而不是实际的正则表达式标签?如果您尝试转义反斜杠会发生什么? -
将反斜杠转义为
\\t? -
是的,试一试。不知道它是否会起作用:)
-
我跑了
perl -pi -e 's{^\\t*###[\S\s]*?^\\t*###}{"foo"}gme' file.coffee仍然没有快乐。
标签: regex perl command-line