`perl -pe` 只匹配文件开头?

mpe*_*pen 4 string perl multiline

我想

perl -pe 's;\A(?!syntax:);syntax: glob\n\n;' .hgignore
Run Code Online (Sandbox Code Playgroud)

在包含以下内容的文件上:

dist
node_modules
.vscode
Run Code Online (Sandbox Code Playgroud)

我期望的输出是:

syntax: glob

dist
node_modules
.vscode
Run Code Online (Sandbox Code Playgroud)

需要注意的是,我可以重复运行它,并且它不会保持预先挂起状态。

我用来\A(?!syntax:)将正则表达式锚定到文件的开头,然后(?!说“后面没有”。好像\A匹配的是行的开头,而不是文件的开头。

如何只匹配文件的开头部分?

zdi*_*dim 5

随着-p开关,文件将被逐行读取。因此代码永远看不到整个文件,一次只能看到一行。

将整个文件“吞入” $_do中perl -0777 -pe'...' file。这-0777会取消设置输入记录分隔符,因此读取的“行”-p实际上是整个文件。在 perlrun 中查看

然后正则表达式将在整个文件的多行字符串上运行。

对于多行字符串,通常需要/m 修饰符,以便^$匹配字符串内行的开头和结尾,而我们必须\A匹配整个字符串的开头。人们通常还需要修饰符/s,以便它.也匹配换行符。

但是,对于您的目的来说,似乎不需要这些。然后,如果没有修饰符,/m锚点^将匹配字符串的开头,就像\A. 但我确实发现\A更好,因为它清楚地表达了意图。