1

我在文本文件(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 正则表达式删除“你好,现在我会”之前的所有内容,我相信这支持这一点。这是我使用的命令:

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

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

4

4 回答 4

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
于 2013-10-24T04:11:37.297 回答
1
perl -n -e 'print if $_ =~ /^Hello, now I will start typing a sentence\.$/' input.txt
于 2013-10-24T02:33:07.280 回答
1
> perl -i -lne 'BEGIN{$f=0}if(/Hello/){$f=1}if($f){print}' your_file
于 2013-10-24T06:41:10.020 回答
1

undef您可以通过将输入记录分隔符更改为,来一次 slurp 整个文件

perl -0777 -pe 's/.*? (?=Hello)//xs' input.txt

但更好的方法是逐行进行

perl -ne '$b = 1 .. /^Hello/; print if $b =~ /^$|E0$/' input.txt
于 2013-10-24T05:43:06.197 回答