Awk - 在特定位置替换文本

时间:2013-10-10 03:02:38

标签: bash awk

我有以下脚本:

script.sh:

#!/bin/bash

FileName=$1;
awk '
/Import()/
{
    while (sub(/\$requestedMessage/, "bar") == 0)
    {
        print;
        getline;
    }
}
1' > file.tmp $FileName

以下文件:

文件:

function FunctionA()
{
    message=$requestedMessage
}

function FunctionB()
{
    message=$requestedMessage
}

想法是打电话

./script.sh file

并将功能message=$requestedMessage中的FunctionB()变量替换为message=bar,但仅限于FunctionB()而不是FunctionA()

我对AWK很新,我似乎不明白我做错了什么。

谢谢,

1 个答案:

答案 0 :(得分:1)

awk -v RS= -v ORS='\n\n' '
/FunctionB\(\)/ {
    sub(/\$requestedMessage/, "bar")
}
1' "$FileName" > file

也许这更像你的想法:

awk '
/^function/ { inTarget = (/FunctionB\(\)/ ? 1 : 0) }
inTarget { sub(/\$requestedMessage/, "bar") }
1' "$FileName" > file

如果不是 - 你怎么知道何时到达函数定义的末尾?以上假设您知道在下一个函数定义开始时一个函数已经结束。