在字符串中查找文本并在下一行替换一些文本

时间:2018-11-29 20:24:37

标签: bash shell awk sed

我有一个文件,其中包含一些类似于以下内容的文本:

#my-var="Group Name",*ItemInGroup
ThisIsTheResult/aaa/bbb/1
#my-var="Group Name",ItemInGroup
ThisIsTheResult/aaa/bbb/2
#my-var="Group Name",ItemInGroup2
ThisIsTheResult/aaa/bbb/3
#my-var="Another Group Name",*AnotherItemInGroup
ThisIsTheResult/aaa/bbb/4
#my-var="Another Group Name",AnotherItemInGroup
ThisIsTheResult/aaa/bbb/5

但是,我想搜索文档,如果它找到my-var="+++++++++++",*(其中+++++++++++可以是任何东西),那么它将继续进行到下一行,并替换{{1} }和aaa/bbb。预期结果如下:

yyy/zzz

想要在shell脚本中执行此操作,但是我的regex和sed / awk经验还不够好...所以希望有人可以轻松地知道答案:)

欢呼

大卫

1 个答案:

答案 0 :(得分:1)

使用GNU sed:

sed '/my-var=".*",\*/{n;s|aaa/bbb|yyy/zzz|}' file

如果一行与正则表达式my-var=".*",\*相匹配,则读取下一行(n)并在s|||中搜索aaa/bbb,并替换为yyy/zzz

输出:

#my-var="Group Name",*ItemInGroup
ThisIsTheResult/yyy/zzz/1
#my-var="Group Name",ItemInGroup
ThisIsTheResult/aaa/bbb/2
#my-var="Group Name",ItemInGroup2
ThisIsTheResult/aaa/bbb/3
#my-var="Another Group Name",*AnotherItemInGroup
ThisIsTheResult/yyy/zzz/4
#my-var="Another Group Name",AnotherItemInGroup
ThisIsTheResult/aaa/bbb/5

请查看man sedThe Stack Overflow Regular Expressions FAQ