我试图标记颜色标签内的所有内容并将其替换为其他内容,例如:
I have a [color=blue]dog[/color] and a [color=blue]cat[/color] in my house.
到
I have a [color=blue][b]foobar[/b][/color] and a [color=blue][b]foobar[/b][/color] in my house.
这是我尝试过的:
sample='I have a [color=blue]dog[/color] and a [color=blue]cat[/color] in my house.'
replace='foobar'
sample=$(echo $sample| sed "s/\[color=blue\].*\[\/color\]/\[color=blue\]\[b\]$replace\[\/b\]\[\/color\]/g")
这让我很感动:
I have a [color=blue][b]foobar[/b][/color] in my house.
关于如何在这种情况下使 sed 非贪婪有什么想法吗?
最佳答案
只需将 .*
替换为 [^[]*
(左括号以外的任何字符)。即:
"s/\[color=blue\][^[]*\[\/color\]/\[color=blue\]\[b\]$replace\[\/b\]\[\/color\]/g"
关于regex - sed 在两个字符串之间替换通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27894009/