2014-07-04 40 views
1

我不能找出如何解决这个简单的问题后字符串的第一次出现:bash脚本找到一个URL

我有一个XML文件和一个URL作为脚本参数:$网址。

我需要在$ URL(可能是:http://www.webpage2.com)后面找到字符串“NO_CODE”,并用CODE_OK替换此字符串。

有没有简单的方法可以做到这一点?

<Row ss:AutoFitHeight="0"> 
    <Cell ss:StyleID="s65" ss:HRef="http://www.webpage1.com"><Data 
     ss:Type="String">Name of the webpage 1</Data></Cell> 
    <Cell><Data ss:Type="String">NO_CODE</Data></Cell> 
    </Row> 
    <Row ss:AutoFitHeight="0"> 
    <Cell ss:StyleID="s65" ss:HRef="http://www.webpage2.com"><Data 
     ss:Type="String">Name of the webpage 2</Data></Cell> 
    <Cell><Data ss:Type="String">NO_CODE</Data></Cell> 
    </Row> 
    <Row ss:AutoFitHeight="0"> 
    <Cell ss:StyleID="s65" ss:HRef="http://www.webpage3.com"><Data 
     ss:Type="String">Name of the webpage 3</Data></Cell> 
    <Cell><Data ss:Type="String">NO_CODE</Data></Cell> 
    </Row> 

非常感谢。

回答

0

通过GNU AWK和sed,

$ awk -v RS="</Row>" '/http:\/\/www\.webpage2\.com/{sub(/NO_CODE/,"CODE_OK")}1' ORS="</Row>" file | sed '$d' 
<Row ss:AutoFitHeight="0"> 
    <Cell ss:StyleID="s65" ss:HRef="http://www.webpage1.com"><Data 
     ss:Type="String">Name of the webpage 1</Data></Cell> 
    <Cell><Data ss:Type="String">NO_CODE</Data></Cell> 
    </Row> 
    <Row ss:AutoFitHeight="0"> 
    <Cell ss:StyleID="s65" ss:HRef="http://www.webpage2.com"><Data 
     ss:Type="String">Name of the webpage 2</Data></Cell> 
    <Cell><Data ss:Type="String">CODE_OK</Data></Cell> 
    </Row> 
    <Row ss:AutoFitHeight="0"> 
    <Cell ss:StyleID="s65" ss:HRef="http://www.webpage3.com"><Data 
     ss:Type="String">Name of the webpage 3</Data></Cell> 
    <Cell><Data ss:Type="String">NO_CODE</Data></Cell> 
    </Row> 
0

另一个awk的方式

awk '/www.webpage2.com/{x=1}x{if(sub(/NO_CODE/,"CODE_OK"))x=0}1' file 

可变

awk -vy="$website" '$0~y{x=1}x{if(sub(/NO_CODE/,"CODE_OK"))x=0}1' file 
+0

以及使用一个变量的网站,比如什么: WEBPAGE =“http://webpage2.com/section1/section2/” 然后将该变量传递给awk与该网站? Thansk。 – user3139207

+0

@ user3139207你可以通过awk的'-v'参数来做到这一点。 –

+0

但是如何将它整合到这个例子中呢?任何帮助? – user3139207