bash - Replacing some uppercase character with lowercase character using sed -
i have file named file.txt contains absolute paths. looks that:
j:/folder/inner j:/folder/inner2 first, wanted write bash script replaces j:/ /cygdrive/j/. did this:
sed -i 's/j:\//\/cygdrive\/j\//g' file.txt and works expected.
want more complicated: absolute paths don't have start j- can start c, d, e ...
want same thing did above, don't know first letter. example: c:/folder/inner become /cygdrive/c/folder/inner , d:/folder/inner become /cygdrive/d/folder/inner.
understand need use regular expression acheiving that, have not found way this. know how can want?
to sed, you'd need support changing case gnu sed provides. so, not portable solution
$ cat file.txt j:/folder/inner j:/folder/inner2 c:/folder/inner d:/folder/inner $ sed -e 's#^(.):#/cygdrive/\l\1#' file.txt /cygdrive/j/folder/inner /cygdrive/j/folder/inner2 /cygdrive/c/folder/inner /cygdrive/d/folder/inner -eenable ere, in case avoids having escape()- some versions might support
-rinstead of-e
- some versions might support
^(.):match character ,:beginning of line- use
^([a-z]):or^([a-za-z]):needed match alphabets
- use
/cygdrive/\l\1in replacement section, string/cygdrive/, lowercase version of captured character used- note use of
#delimiter character, helps avoid escaping/s in search/replacement sections- any character other
\, newline character can used
- any character other
- add
-ionce solution working expected
Comments
Post a Comment