我一直在尝试删除文本每行中特定字符前后的文本。手动操作非常困难,因为它包含5000行,我需要在每行中删除该关键字之前的文本。任何可以执行此操作的软件都可以使用,或者可以在Windows上运行的任何Perl脚本。我在ActivePerl中运行Perl脚本,因此可以执行此操作并在ActivePerl上运行的脚本会很有帮助。
由于
答案 0 :(得分:3)
我会用这个:
$text =~ s/ .*? (keyword) .* /$1/gx;
答案 1 :(得分:2)
您不需要软件,您可以将此部分作为现有脚本。多行正则表达式替换/ a(b)c /然后您可以使用$ 1对替换器中的b进行反射。如果不了解您正在使用的文本的更多信息,很难猜出实际模式会是什么。
答案 2 :(得分:2)
假设您有以下内容:
text1 text2 keyword text3 text4 text5 keyword text6 text7
你想要的是
s/.*?keyword(.*?)keyword.*/keyword$1keyword/;
否则你只需用关键字
替换整行数据的一个例子可以帮助我们更清楚
答案 3 :(得分:1)
我会说,如果$ text包含你的全文,你可以这样做:
$text =~ s/^.*(keyword1|keyword2).*$/$1/m;
m
修饰符使^
和$
看到行的开头和结尾,而不是字符串的开头和结尾。
答案 4 :(得分:0)
假设您要删除keyword1
左侧的所有文字以及keyword2
右侧的所有文字:
while (<>) {
s/.*(keyword1)/$1/;
s/(keyword2).*/$1/;
print;
}
将它放入perl脚本并按如下方式运行:
fix.pl original.txt > new.txt
或者,如果您只想在原地进行此操作,可能会同时在多个文件上执行此操作:
perl -i.bak -pe 's/.*(keyword1)/$1/; s/(keyword2).*/$1/;' original.txt original2.txt
这将进行就地编辑,将原始文件重命名为.bak扩展名,使用带打印的隐式while循环,并在每次打印前执行搜索和替换模式。
为了安全起见,首先在没有-i选项的情况下验证它,或者至少在一个文件上验证它......