如何使用正则表达式删除文件开头的文本?

Geo*_*F67 3 regex perl text inline-editing

我有一堆包含半标准头文件的文件.也就是说,它的外观非常相似,但文字有些变化.

我想从所有文件中删除此标头.

从查看文件,我知道我要删除的内容是封装在相似的单词之间.

所以,例如,我有:

Foo bar...some text here...
more text
Foo bar...I want to keep everything after this point
Run Code Online (Sandbox Code Playgroud)

我在perl中尝试了这个命令:

perl -pi -e "s/\A.*?Foo.bar*?Foo.bar//simxg" 00ws110.txt
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我不是一个正则表达式专家,但希望有人知道如何基于文本匹配而不是字符数从文件的开头基本上删除一大块文本...

eph*_*ent 7

默认情况下ARGV(也<>就是幕后使用的-p)一次只能读取一行.

解决方法:

  1. 取消设置$/,告诉Perl一次读取整个文件.

    perl -pi -e "BEGIN{undef$/}s/\A.*?Foo.bar*?Foo.bar//simxg" 00ws110.txt
    
    Run Code Online (Sandbox Code Playgroud)

    BEGIN 必须在第一次读取完成之前运行该代码.

  2. 使用-0,设置$/ = "\0".

    perl -pi -0 -e "s/\A.*?Foo.bar*?Foo.bar//simxg" 00ws110.txt
    
    Run Code Online (Sandbox Code Playgroud)
  3. 利用触发器操作器.

    perl -ni -e "print unless 1 ... /^Foo.bar/'
    
    Run Code Online (Sandbox Code Playgroud)

    这将跳过从第1行开始的打印/^Foo.bar/.