Bash脚本用于查找URL后第一次出现的字符串

时间:2014-07-04 09:31:12

标签: bash shell command find-occurrences

我无法找到解决这个简单问题的方法:

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

我需要在$ URL之后找到字符串“NO_CODE”(可能是:http://www.webpage2.com)并将此字符串替换为: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>

非常感谢。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

另一种方式

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