【发布时间】:2019-05-05 06:48:32
【问题描述】:
目前我正在使用 AWK 来查找和替换字符串前三个匹配项的一部分。字符串是这样格式化的,文件中有很多这样的字符串:
func(tempID="39849235",count='12');
使用this link,我能够找到一种使用AWK 查找和替换字符串的前三个实例的方法。我把它改成了我需要它做的事情,我的脚本的 sn-p 如下:
id=12349876
awk 'BEGIN {matches=0}
matches < 3 && /.*tempID.*/ { sub(/tempID=.[0-9]+./,"tempID='"$id"'"); matches++ }
{ print $0 }' filName.py >filName.py.changed
上述代码的目标是匹配包含 tempID 的任何行,并将分配给 tempID 的数字替换为保存在名为 $id 的变量中的值。查找和替换效果很好,但现在我想用不同的数字替换实例 4-9。我尝试了以下方法,但它仍然只替换了前 5 个 tempID 实例:
id2=39843237
awk 'BEGIN {matches=4}
matches < 9 && /.*tempID.*/ { sub(/tempID=.[0-9]+./,"tempID='"$id2"'"); matches++ }
{ print $0 }' filName.py >filName.py.changed
是否有另一种方法来实现这一点,以便替换该范围的值?它不必与 AWK 一起使用,它可以与 sed 或任何其他 Linux 实用程序一起使用。
编辑:下面是线条前后的示例:
之前:
func2(blah)
func3(blah)
func(tempID="83747432",count='12');
func(tempID="83747432",count='12');
func(tempID="83747432",count='12');
func(tempID="83747432",count='12');
func(tempID="83747432",count='12');
func(tempID="83747432",count='12');
之后:
func2(blah)
func3(blah)
func(tempID="83747432",count='12');
func(tempID="83747432",count='12');
func(tempID="83747432",count='12');
func(tempID="39843237",count='12');
func(tempID="39843237",count='12');
func(tempID="39843237",count='12');
注意第三行之后的行是如何改变的,但只有第三行匹配模式.*tempID.*
【问题讨论】:
标签: linux bash awk sed scripting