Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I want to search replace & strings in thousands of wavefront *.mtl files to add many new Texture links. Is this even possible with Notepad++ regex? I´ve already altered these files very often with regex, but this task is way over my head!

At the current state I got many Materialparts in every file looking like this:

newmtl Material__28
    Ns 0.000000
         ︙
    Kd 1.000000 1.000000 1.000000
    Ks 0.000000 0.000000 0.000000
    Ke 0.000000 0.000000 0.000000

    map_Kd textures\wall_exterior_wood_02.png

where the dots represent text that I don't want to change (and that doesn't contain the string map_Kd).

And afterwards it should contain the NRM & Spec PNGs named exactly like the first map_Kd.

Example:

newmtl Material__28
    Ns 0.000000
         ︙
    Kd 1.000000 1.000000 1.000000
    Ks 0.000000 0.000000 0.000000
    Ke 0.000000 0.000000 0.000000

    map_Kd   textures\wall_exterior_wood_02.png
    map_bump textures\wall_exterior_wood_02_nrm.png
    map_bump textures\wall_exterior_wood_02_nrm alternative.png
    map_Ks   textures\wall_exterior_wood_02_spec.png

I've added spaces to the map lines for clarity. Important is that the naming of the PNGs should be the same except for the prefixes "map_bump" and "map_ks" and the postfixes "_nrm", "_nrm alternative", and "_spec".

share|improve this question

In Notepad++.

Use ctrl+h (replace)

Select "Regular Expression" radio button in the Search Mode box in the bottom left (making sure the matches newline tickbox is unticked)

Find:

map_Kd\s+(\S+)\.png

Replace:

map_Kd \1.png\n map_bump \1_nrm.png\n map_bump \1_nrm_alternative.png\n mapKs \1_spec.png

The find expression looks for "map_Kd" followed by one or more spaces ("\s+") then keeps one or more non-space characters ("(\S+)") until it hits ".png"

The replace puts the string you kept in wherever "\1" appears. I've also included "\n" newlines and spacing to align things as in your example.

share|improve this answer
    
You sir are my Notepad++ hero! – João Neves Feb 18 at 10:15

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .