想要replacelinux文件中的2个string之间的特定字

我想在我的文件的每一行"<TD>" with "<TH>"replace每个"<TD>" with "<TH>"但仅在"<TD>Grand Total" to "</TABLE>"之后replace"<TD>Grand Total" to "</TABLE>"关键字之后,关键字与bash脚本的帮助。

我试过下面的命令,但它是取代整个文件中的关键字。 请帮帮我。

 awk 'match($0,"<TD>Grand.*"){print substr($0,RSTART)}' myfile.txt | sed -i 's/TD/TH/g' myfile.txt 

样本数据如下

 <br><br>Book Inventory Report <br><br> <TABLE BORDER=1><TR><TH>product</TH><TH>Quantity</TH></TR><TR><TD>product1><TD>30</TD><TD>product2><TD>45</TD></TR><TR><TD>Grand Total</TD><TD>75</TD></TR></TABLE> <br><br>Shoe Inventory Report <br><br> <TABLE BORDER=1><TR><TH>product</TH><TH>Quantity</TH></TR><TR><TD>product1><TD>20</TD><TD>product2><TD>60</TD></TR><TR><TD>Grand Total</TD><TD>80</TD></TR></TABLE> <br><br>Apparel Inventory Report <br><br> <TABLE BORDER=1><TR><TH>product</TH><TH>Quantity</TH></TR><TR><TD>product1><TD>60</TD><TD>product2><TD>40</TD></TR><TR><TD>Grand Total</TD><TD>100</TD></TR></TABLE> 

所需的数据示例是:

 <br><br>Book Inventory Report <br><br> <TABLE BORDER=1><TR><TH>product</TH><TH>Quantity</TH></TR><TR><TD>product1><TD>30</TD><TD>product2><TD>45</TD></TR><TR><TH>Grand Total</TH><TH>75</TH></TR></TABLE> <br><br>Shoe Inventory Report <br><br> <TABLE BORDER=1><TR><TH>product</TH><TH>Quantity</TH></TR><TR><TD>product1><TD>20</TD><TD>product2><TD>60</TD></TR><TR><TH>Grand Total</TH><TH>80</TH></TR></TABLE> <br><br>Apparel Inventory Report <br><br> <TABLE BORDER=1><TR><TH>product</TH><TH>Quantity</TH></TR><TR><TD>product1><TD>60</TD><TD>product2><TD>40</TD></TR><TR><TH>Grand Total</TH><TH>100</TH></TR></TABLE> 

myfile.txt文件

这可能不是最好的答案,但下面的perl片段应该有所帮助:

 #!/usr/local/bin/perl use strict; use warnings; open (INPUTFILE, "mytext.txt") or die ("Unable to find the file"); open (OUTFILE, ">output") or die ("Unable to find the file"); my @lines = <INPUTFILE>; foreach my $str (@lines) { if (my ($matches) = $str =~ /(<TD>Grand Total<\/TD>(<TD>-?[0-9.]+<\/TD>)*)/) { my $orig = $matches; $matches =~ tr/TD/TH/ ; $str =~ s/$orig/$matches/; print OUTFILE $str; }else{ print OUTFILE $str; } } 

应该创建一个新的文件“输出”与您正在寻找的数据

保存上面的.pl文件并执行它

这是你需要的吗?

 sed -i.bak s/"Grand Total"/NEW_STRING/g myfile.txt 

编辑

我已经回答,然后再编辑你的问题。 在你的情况下,你可以:

 sed -i.bak s/"Grand Total\<\/TD\>\<\/TD\>"/"Grand Total\<\/TH\>\<\/TH\>"/g myfile.txt sed -i.bak s/"\<\/TD\>\<\/TR\>\<\/TABLE\>"/"\<\/TH\>\<\/TR\>\<\/TABLE\>"/g myfile.txt