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匹配的是行的开头,而不是文件的开头。
如何只匹配文件的开头部分?
随着-p开关,文件将被逐行读取。因此代码永远看不到整个文件,一次只能看到一行。
将整个文件“吞入” $_do中perl -0777 -pe'...' file。这-0777会取消设置输入记录分隔符,因此读取的“行”-p实际上是整个文件。在 perlrun 中查看
然后正则表达式将在整个文件的多行字符串上运行。
对于多行字符串,通常需要/m 修饰符,以便^和$匹配字符串内行的开头和结尾,而我们必须\A匹配整个字符串的开头。人们通常还需要修饰符/s,以便它.也匹配换行符。
但是,对于您的目的来说,似乎不需要这些。然后,如果没有修饰符,/m锚点^将匹配字符串的开头,就像\A. 但我确实发现\A更好,因为它清楚地表达了意图。