我有一个文件,其中包含一些类似于以下内容的文本:
#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经验还不够好...所以希望有人可以轻松地知道答案:)
欢呼
大卫
答案 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 sed
和The Stack Overflow Regular Expressions FAQ。