如何在使用perl正则表达式的短语之前删除所有内容(包括换行符)

时间:2013-10-24 02:21:14

标签: regex perl

我在文本文件(input.txt)中有以下内容:

/dsdjf48 84f3jh0-=-=-+F_+_m a=
^^^^^^^^^
Random Words
vvvvvvvvv
fkls;[]saf\as-1f-d=fd-s=dsf=-s

Hello, now I will start typing a sentence.

我需要在使用perl正则表达式“Hello,now now will”之前删除所有内容,我相信支持这一点。 这是我使用的命令:

perl -p -e "s/search-term/replace-term/" input.txt

当我执行任何正则表达式搜索时,它会在每行搜索一行。是否有启用多行搜索的标志?

4 个答案:

答案 0 :(得分:2)

这应该这样做,在这里使用二进制..作为flip-flop运算符。

perl -pe '$_ = "" unless /^Hello, now/ .. 1' input.txt

使用-i(内联选项)保存输入文件本身的更改。

perl -pi -e '$_ = "" unless /^Hello, now/ .. 1' input.txt

在这种情况下也可以使用=!!

perl -pi -e '$_ x=!! (/^Hello, now/ .. 1)' input.txt

答案 1 :(得分:1)

perl -n -e 'print if $_ =~ /^Hello, now I will start typing a sentence\.$/' input.txt

答案 2 :(得分:1)

您可以通过将输入记录分隔符更改为undef

来一次性覆盖整个文件
perl -0777 -pe 's/.*? (?=Hello)//xs' input.txt

但更好的方法是逐行进行

perl -ne '$b = 1 .. /^Hello/; print if $b =~ /^$|E0$/' input.txt

答案 3 :(得分:1)

> perl -i -lne 'BEGIN{$f=0}if(/Hello/){$f=1}if($f){print}' your_file