在awk中使用变量替换而不是字符串

时间:2014-07-07 22:06:52

标签: awk command sh

我在bash脚本中使用此命令,以便将字符串“NOTHING_HERE”替换为“$ EMAIL”,如果它获取URL“$ findURL”。

问题是我不知道如何告诉awk使用变量$ EMAILS的值而不是使用stirng“$ EMAIL”。

awk -v RS="</Row>" '/'$findURL'/{sub(/NOTHING_HERE/,"$EMAIL")}1' ORS="</Row>" /home/pi/testJMC/JustLinksJMC2.xml | sed '$d'

有什么想法吗?

谢谢!

编辑:提供示例输入:

<Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s65" ss:HRef="http://www.mapeo-rse.info/promotor/fundaci%C3%B3n-ecolog%C3%AD-y-desarrollo-ecodes"><Data
      ss:Type="String">Fundación Ecología y Desarrollo (ECODES)</Data></Cell>
    <Cell><Data ss:Type="String">NOTHING_HERE</Data></Cell>
   </Row>
   <Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s65" ss:HRef="http://www.mapeo-rse.info/promotor/fundaci%C3%B3n-iberoamericana-para-la-gesti%C3%B3n-de-la-calidad-fundibeq"><Data
      ss:Type="String">Fundación Iberoamericana para la Gestión de la Calidad (Fundibeq)</Data></Cell>
    <Cell><Data ss:Type="String">NOTHING_HERE</Data></Cell>
   </Row>
   <Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s65" ss:HRef="http://www.mapeo-rse.info/promotor/fundaci%C3%B3n-interamericana-iaf"><Data
      ss:Type="String">Fundación Interamericana (IAF)</Data></Cell>
    <Cell><Data ss:Type="String">NOTHING_HERE</Data></Cell>
   </Row>
   <Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s65" ss:HRef="http://www.mapeo-rse.info/promotor/fundaci%C3%B3n-nuevo-periodismo-iberoamericano-fnpi"><Data
      ss:Type="String">Fundación Nuevo Periodismo Iberoamericano (FNPI)</Data></Cell>
    <Cell><Data ss:Type="String">NOTHING_HERE</Data></Cell>
   </Row>
   <Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s65" ss:HRef="http://www.mapeo-rse.info/promotor/fundaci%C3%B3n-para-el-desarrollo-sostenible-fundes"><Data
      ss:Type="String">Fundación para el Desarrollo Sostenible (FUNDES)</Data></Cell>
    <Cell><Data ss:Type="String">NOTHING_HERE</Data></Cell>
   </Row>

2 个答案:

答案 0 :(得分:1)

你需要使用-v name=value语法将shell变量传递给awk的方式:

awk -v RS="</Row>" -v u="$findURL" -v email="$EMAIL" '$~u{sub(/NOTHING_HERE/, email)}1' ORS="</Row>" /home/pi/testJMC/JustLinksJMC2.xml | sed '$d'

答案 1 :(得分:0)

您可以采用与$findURL相同的方式:

awk -v RS="</Row>" '/'$findURL'/{sub(/NOTHING_HERE/,'"$EMAIL"')}1' ORS="</Row>" /home/pi/testJMC/JustLinksJMC2.xml | sed '$d'

这应该可行,但我无法测试,因为您没有提供输入代码段。