2

I have a text formatted like following:

key [value]
key [value, value]

now I realized I forgot to put a comma between the key and the values array, which means I am trying to get this:

key, [value]
key, [value, value]

I thought, instead of regenerating the file which takes several hours, I could maybe easily do it with sed. I tried cat small.txt | sed -n 's/{ \[}/{, \[}/g' and some other variants (like without {} and without spaces, I get no error, but the file doesn't change

Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563
Iliass Mw
  • 57
  • 5

1 Answers1

1

You may use

sed -E 's/([[:alnum:]])([[:space:]]+\[)/\1,\2/g' small.txt > newsmall.txt

Here, -E enables the POSIX ERE regex engine and the command does the following:

  • ([[:alnum:]])([[:space:]]+\[) finds an alphanumeric and places it in Group 1, then grabs 1+ whitespaces and a [ into Group 2
  • \1,\2 - replaces the match with Group 1, then , and then Group 2 contents.

If you want to modify the file inplace, see sed edit file in place.

Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563