如何使用AWK语句替换每个出现的内容

时间:2015-12-05 16:33:50

标签: linux bash awk

如何调整以下代码以替换元素ThreadGroup.num_threads的每个值集。

Here is the code I'm trying to make work.

  awk ' BEGIN { FS = "[<|>]" }
    {
            if ($2 == "stringProp name=\"ThreadGroup.num_threads\"") {
                   $newValue
            }
            print
    }
    ' Test1.jmx

这是我正在解析的XML片段。

     <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
    <stringProp name="ThreadGroup.num_threads">3</stringProp>
    </ThreadGroup>
    <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group2" enabled="true">
    <stringProp name="ThreadGroup.num_threads">3</stringProp>
    </ThreadGroup>



newValue=999999

2 个答案:

答案 0 :(得分:1)

在您的代码中,永远不会定义变量newValue。此外,您不需要在自己的变量前面$

这是我的建议:

awk '$0 ~ /stringProp name="ThreadGroup.num_threads"/ 
  {sub(/<stringProp name="ThreadGroup.num_threads">[0-9]+/,
       "<stringProp name=\"ThreadGroup.num_threads\">999999",
        $0)}
   {}1' inputFile

第一行:我检查当前行是否包含文字stringProp name="ThreadGroup.num_threads"
第2至第4行:如果是,我会将字符串<stringProp name="ThreadGroup.num_threads">替换为后跟一个或多个数字后面跟999999相同的字符串。 第5行:最后,我输出每一行。

当然你可以定义一个变量:

awk 'BEGIN{newValue=999999}
     $0 ~ /stringProp name="ThreadGroup.num_threads"/ 
     {sub(/<stringProp name="ThreadGroup.num_threads">[0-9]+/,
          "<stringProp name=\"ThreadGroup.num_threads\">"newValue,
           $0)}
     {}1' inputFile

输出结果为:

 <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.num_threads">999999</stringProp>
</ThreadGroup>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group2" enabled="true">
<stringProp name="ThreadGroup.num_threads">999999</stringProp>
</ThreadGroup>

答案 1 :(得分:0)

使用sed

可能会更容易
$ sed -r 's/("ThreadGroup.num_threads">)([0-9]+)</\19999</g'