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 
  • -e enable ere, in case avoids having escape ()
    • some versions might support -r instead of -e
  • ^(.): match character , : beginning of line
    • use ^([a-z]): or ^([a-za-z]): needed match alphabets
  • /cygdrive/\l\1 in 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
  • add -i once solution working expected

Comments

Popular posts from this blog

Sort a complex associative array in PHP -

vb.net - How to ignore if a cell is empty nothing -

recursion - Can every recursive algorithm be improved with dynamic programming? -