[英]How to match above and below lines, then insert words in between them by using Perl?
How to match special characters and multiple lines at the same time? 如何同时匹配特殊字符和多行? Then insert text in between those matched lines. 然后在这些匹配的行之间插入文本。 I would like to match lines - Sample ("xx"),direction:north and market_fall ("when_promotion_8X10_b05afn10ld0b0") { as shown below. 我想匹配行-样本(“ xx”),direction:north和market_fall(“ when_promotion_8X10_b05afn10ld0b0”){如下所示。 Then print text after line color code:0.000;. 然后在行颜色代码之后打印文本:0.000;。 My coding seems wrong in somewhere. 我的编码在某处似乎是错误的。 Could anyone give guidance? 谁能提供指导? Thank you.. 谢谢..
Sample ("apple") {
direction : north ;
I dont want this line+: ;
I dont want this line^ ;
No this line : line ;
color code: 0.000;
I dont want this line: (c*b)+(c*a)+(b*a))" ;
max_price : 3.6;
min_price : 1.2;
I dont want this line_time() {
I dont want this line_t_sense : positive_1 ;
No_this line either : "c" ;
market_fall ("when_promotion_8X10_b05afn10ld0b0") {
My coding: 我的编码:
if(my $line =~ m/Sample(" ")/ & /direction : north/ & /market_fall ("when_promotion_8X10_b05afn10ld0b0") {/ ){ #match specific line
print "aa\n"; #print words at previous line
}
}
Try following perl
one-liner from shell 尝试从shell跟随perl
一线
perl -0777 -pe 's/(Sample\s*\("[^"]+"\)\s*\{.*direction\s*:\s*\w+\s*;.*color\s*code:\s*0.000;)(.*market_fall\s*\("[^"]+"\))/$1\nLineYouWantToInsert$2/gs' file
EDIT 编辑
If you must use it within a perl script
try following piece of code. 如果必须在perl script
使用它,请尝试以下代码。
#!/usr/bin/perl
use strict;
use warnings;
open my $fh, '<', 'file' or die $!;
my $line = do { local $/; <$fh> };
$line =~ s/(Sample\s*\("[^"]+"\)\s*\{.*direction\s*:\s*\w+\s*;.*color\s*code:\s*0.000;)(.*market_fall\s*\("[^"]+"\))/$1\nLineYouWantToInsert$2/gs;
print $line;
close $fh
I like abiessu's suggestion. 我喜欢阿比苏的建议。 Here is some sample code: 这是一些示例代码:
#!/usr/bin/perl
my $l1;
my $l2;
while( my $line = <> ){
$l1 = $l2;
$l2 = $line;
if( $l1 =~ /start1/ && $l2 =~ /start2/ ){
print $l1;
print "Inserted Text\n";
print $l2;
}
else {
print $l2;
}
}
given the input: 给定输入:
a
b
c
start1
start2
d
e
You will get: 你会得到:
a
b
c
start1
start1
Inserted Text
start2
d
e
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.