Took me a minute to figure this out but it works.
Given the following string, I want to replace {
and }
with [
and ]
keeping each number inside and only with a number inside the braces without space and without letters.
data.txt:
{1}: Today is tomorrow's yesterday. {2}: This year is next year's yesteryear. {3}: Foo {10}: Bar {100}: Baz {91919}: Qux {99119a9}: 42
sed -e 's/{\([0-9]\+\)}/[\1]/ data.txt
rjk@debian:~$ sed -e 's/{\([0-9]\+\)}/[\1]/' data.txt [1]: Today is tomorrow's yesterday. [2]: This year is next year's yesteryear. [3]: Foo [10]: Bar [100]: Baz [91919]: Qux {99119a9}: 42 {1 2 3 4 5}: infinity and beyond.
If I want to replace anything in the braces, then I could alter the command slightly.
sed -e 's/{\(.*\)}/[\1]/ data.txt
rjk@debian:~$ sed -e 's/{\(.*\)}/[\1]/' data.txt [1]: Today is tomorrow's yesterday. [2]: This year is next year's yesteryear. [3]: Foo [10]: Bar [100]: Baz [91919]: Qux [99119a9]: 42 [1 2 3 4 5]: infinity and beyond.