I’ve a file:
import "aaaa/bbbb.ccc";
import "dddd/eeee.ccc";
import "fffff/ggg/hhhh.ccc";
BLBLBL
BL2BL2BL
And I want to replace the path of the import like this:
import "ooooo/bbbb.ccc";
import "ooooo/eeee.ccc";
import "ooooo/hhhh.ccc";
BLBLBL
BL2BL2BL
I’ve my regex with a match group of the part I want to replace:
import \"([a-zA-Z]+\/|[a-zA-Z]+\/+[a-zA-Z]+\/)[a-zA-Z]+\.ccc\"
But I don’t know how to use it with sed to replace it with ooooo/
>Solution :
You can use
sed -E 's,^(import ").*/,\1ooooo/,' file > newfile
Details:
-E– enabling POSIX ERE syntax^(import ").*/– matches start of string (^),import ", and then one or more chars until the last/\1ooooo– replaes with Group 1 value plusooooo.
The , char is used as a regex delimiter chars, so no need to escape / chars.
See the online demo:
#!/bin/bash
s='import "aaaa/bbbb.ccc";
import "dddd/eeee.ccc";
import "fffff/ggg/hhhh.ccc";
BLBLBL
BL2BL2BL'
sed -E 's,^(import ").*/,\1ooooo/,' <<< "$s"
Output:
import "ooooo/bbbb.ccc";
import "ooooo/eeee.ccc";
import "ooooo/hhhh.ccc";
BLBLBL
BL2BL2BL