Search and replace only first result on each file

2019-02-28 07:57发布

问题:

Is there any way to find a string which is repeated several times in each file but only replace the first result on each file?

Thanks

回答1:

The find dialogue of Notepad++ includes a Find in files tab with a Replace in files button. To replace abc with def in all files you could try the following regular expression search string \A(.*?)abc(.*)\z with \1ghi\2. You will need to select both Regular expression and Dot matches newline.

The \A only matches at the very start of the file. The (.*?)abc is a non-greedy match and capture of everything up to but not including the first abc. The (.*) matches and captures everything else to the end of the file which is matched by the \z. (I experimented without the (.*)\z part and all occurrences of abc were changed.)

If the replacement to be done also needs regular expressions then you may need to alter the \2 part of the replacement text.

Do not know how this would work with big files. Whatever size of file you use I recommend making a backup before using the Replace in files facility.

Tested in Notepad++ 6.3.2 with two very small files.



回答2:

If you want to perform the replacement on multiple open files, you can't do it with a single click in the Find dialog; you'll have to select each file and do replacements one at a time manually.

You may be able to record a macro to do this, however I'm not sure if you'll have to run it once for each file as well, or if you can have the macro repeat itself for all open files.



标签: notepad++