2013-10-10 71 views
0

subsititute文本我有以下脚本: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 

,并在功能上FunctionB()message=$requestedMessage变量替换到message=bar但只有在FunctionB(),而不是FunctionA()

我很新的AWK,我好像不明白我在做什么错。

感谢,

回答

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 

如果没有 - 你怎么知道当你到达一个函数定义的结束?上面假定你知道一个函数在下一个函数定义开始时结束。

+1

嗨那有效!但是,当我在“{”之前和“}”之前添加endlines时,为了试着理解你的代码,它会停止工作......你可以在你的回答中解释它的工作原理吗? – Kam

+0

我们还可以在不使用RS和ORS的情况下执行此操作,因为它会使“文件”更加灵活 – Kam

+0

您不能在'{'之前放置换行符,因为这会完全改变脚本的含义。空格在awk脚本中很重要。我在他们可以去的地方放了几条换行符。你可以在不设置RS和ORS的情况下写一个不同的脚本来做你想做的事情,但是我不明白你的意思是什么时候设置它们“会使解决方案”文件“依赖于” - 什么文件?为什么? –