regex - sed 在两个字符串之间替换通配符

标签 regex bash sed wildcard non-greedy

我试图标记颜色标签内的所有内容并将其替换为其他内容,例如:

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/

相关文章:

python - 如何在 python 中用正则表达式替换一个空格?

regex - 透明重定向到端口 8080

regex - Bash - 从不包含特定模式的文件中获取行

bash - 抑制 Vimdiff 消息

VI中的正则表达式搜索和替换

ios - 如何使用 bash 脚本或 faSTLane 操作从 App Store Connect 获取应用程序版本?

linux - 如何在Linux中循环中按值打印数组?

sed 命令中的 Bash 变量

linux - 查找和替换函数可以进行简单的算术运算?

linux - 如何使用 sed 或 awk 将两个文件的每一行组合在一起?