替换Bash中字符串的一部分中的字符

Sun*_*gam 1 regex bash awk sed

我试图取代-,并:?只在中间(第二)部分由分隔___(3下划线)

输入:

aaa___bb-bb:bbb___cc-cc:ccc
d-d___d-ddd:d-d___e-e:e
Run Code Online (Sandbox Code Playgroud)

输出:

aaa___bb?bb?bbb___cc-cc:ccc
d-d___d?ddd?d?d___e-e:e
Run Code Online (Sandbox Code Playgroud)

我试过下面的sed命令,但它只替换-:了中间部分的最后一次出现

echo "aaa___bb-bb:bbb___cc-cc:ccc
d-d___d-ddd:d-d___e-e:e" | sed "s|\(___[^_]*\)[-:]\([^_]*___\)|\1?\2|g"
Run Code Online (Sandbox Code Playgroud)

输出:

aaa___bb-bb?bbb___cc-cc:ccc
d-d___d-ddd:d?d___e-e:e
Run Code Online (Sandbox Code Playgroud)

我不仅限于使用sed.awk,tr等等也很好.

Ell*_*Ell 5

尝试:

awk -F"___" '{gsub(/[-:]/,"?",$2)}1' OFS="___"
Run Code Online (Sandbox Code Playgroud)