Reputation: 1283
I have a file with following lines:
some /foo/foo/foo some
some=/foo/foo/foo some
some /foo/foo/foo/ some
some=/foo/foo/foo/ some
some "/foo/foo/foo" some
some="/foo/foo/foo" some
some "/foo/foo/foo/" some
some="/foo/foo/foo/" some
some '/foo/foo/foo' some
some='/foo/foo/foo' some
some '/foo/foo/foo/' some
some='/foo/foo/foo/ some
some (/foo/foo/foo) some
some=(/foo/foo/foo) some
How can I find and replace this pathS with path with 'frame' like:
some [p]/foo/foo/foo[;p] some
some=[p]/foo/foo/foo[;p] some
some [p]/foo/foo/foo/[;p] some
some=[p]/foo/foo/foo/[;p] some
some "[p]/foo/foo/foo[;p]" some
some="[p]/foo/foo/foo[;p]" some
some "[p]/foo/foo/foo/[;p]" some
some="[p]/foo/foo/foo/[;p]" some
some '[p]/foo/foo/foo[;p]' some
some='[p]/foo/foo/foo[;p]' some
some '[p]/foo/foo/foo/[;p]' some
some='[p]/foo/foo/foo/[;p] some
some ([p]/foo/foo/foo[;p]) some
some=([p]/foo/foo/foo[;p]) some
I wrote almost all of the examples, if someone might have wanted to set up sub-question. Note: Paths are completely arbitrary. I do not know what are paths. I should only know that they should be replaced with a path with 'frame'
Upvotes: 0
Views: 1981
Reputation: 58578
This might work too:
sed 's,/.*/[^")'\'' ]*,[p]&[;p],' file
Explanation:
Use ,
's as the s
command delimiters. Anchor the regex with the first /
. Then use the greedy *
to swallow everything upto the last /
. Again use the greed of the *
to grab the non-delimiters. Then put text either side of the matched regex. This also highlights the use of "punching a hole" in the quoted command to include the single quote '\''
.
Upvotes: 2
Reputation: 195289
you mentioned:
Note: Paths are completely arbitrary. I do not know what are paths.
I assume the path should be in format \w
(a-z A-Z 0-9 or _). then this sed line:
sed -r 's#(/[a-zA-Z0-9_/]+)#[p]\1[;p]#g' yourFile
will do the job.
see the test with your example. (note I did some changes on the input, to make it "arbitrary")
kent$ cat t
some /foo/foo/fo3o some
some=/foo/foo/fdoo some
some /foo/foo/fxoo/ some
some=/foo/fofo/foo/ some
some "/foxo/foo/foo" some
some="/foo/ffoo/foo" some
some "/foo/foxo/foo/" some
some="/foo/f6oo/foo/" some
some '/foo/fo7o/foo' some
some='/foo/foo7/foo' some
some '/foxo/foo/foo/' some
some='/fo0o/f_oo/foo/ some
some (/foo/f99oox/foo) some
some=(/fo234o/fdoo/fd_oo) some'
kent$ sed -r 's#(/[a-zA-Z0-9_/]+)#[p]\1[;p]#g' t
some [p]/foo/foo/fo3o[;p] some
some=[p]/foo/foo/fdoo[;p] some
some [p]/foo/foo/fxoo/[;p] some
some=[p]/foo/fofo/foo/[;p] some
some "[p]/foxo/foo/foo[;p]" some
some="[p]/foo/ffoo/foo[;p]" some
some "[p]/foo/foxo/foo/[;p]" some
some="[p]/foo/f6oo/foo/[;p]" some
some '[p]/foo/fo7o/foo[;p]' some
some='[p]/foo/foo7/foo[;p]' some
some '[p]/foxo/foo/foo/[;p]' some
some='[p]/fo0o/f_oo/foo/[;p] some
some ([p]/foo/f99oox/foo[;p]) some
some=([p]/fo234o/fdoo/fd_oo[;p]) some'
Upvotes: 1
Reputation: 77185
May be this could offer some help:
[jaypal:~/Temp/tem] cat file
some /foo/foo/foo some
some=/foo/foo/foo some
some /foo/foo/foo/ some
some=/foo/foo/foo/ some
some "/foo/foo/foo" some
some="/foo/foo/foo" some
some "/foo/foo/foo/" some
some="/foo/foo/foo/" some
some '/foo/foo/foo' some
some='/foo/foo/foo' some
some '/foo/foo/foo/' some
some='/foo/foo/foo/ some
some (/foo/foo/foo) some
some=(/foo/foo/foo) some
[jaypal:~/Temp/tem] sed 's@/foo/foo/foo/\?@[p]&[;p]@' file
some [p]/foo/foo/foo[;p] some
some=[p]/foo/foo/foo[;p] some
some [p]/foo/foo/foo/[;p] some
some=[p]/foo/foo/foo/[;p] some
some "[p]/foo/foo/foo[;p]" some
some="[p]/foo/foo/foo[;p]" some
some "[p]/foo/foo/foo/[;p]" some
some="[p]/foo/foo/foo/[;p]" some
some '[p]/foo/foo/foo[;p]' some
some='[p]/foo/foo/foo[;p]' some
some '[p]/foo/foo/foo/[;p]' some
some='[p]/foo/foo/foo/[;p] some
some ([p]/foo/foo/foo[;p]) some
some=([p]/foo/foo/foo[;p]) some
[jaypal:~/Temp/tem]
Upvotes: 0