Replacing every line that ends in X with Y
-
I need to replace every line that ends in a certain string of characters (.png in this case) with a different line - I’ve tried to figure out how it can be done with regex however I can’t seem to get my head around how regex works. I can also post a snippet of the file (although it’s nearing 400,000 lines which is why I can’t do it manually). Any help with this is greatly appreciated
-
Hello, @aulumen-eulogy,
Numerous things can be achieved with regular expressions, indeed ! Of course, we need some additional information to build an accurate search/replacement which could meet your needs ;-))
Just a guess : I suppose that your file contains lines which end with a picture file name, having
.png
format and that you want to change these names with, …let’s say, the.jpg
extension ! If so :-
Open the Replace dialog (
Ctrl+ H
) -
SEARCH
\.png$
-
REPLACE
.jpg
-
Click, preferably, the
Wrap around
option -
Select the
Regular expression
search mode -
Click on the Replace All button
Notes :
-
The dot character must be escaped with the backslash char
\
, as it’s a meta-character, with special signification, in regexes -
At the end, the
$
symbol is an assertion, which means that the literal string .png must be located at the end of each line, in order to get a match
Best Regards,
guy038
-
-
Thank you for the in-depth answer, although it’s not precisely what I’m looking for - Say I have 4 lines:
imageone.png
imagetwo.jpg
unrelatedline
imagethree.png
Instead of replacing the file extension with something else, I need to replace any lines ending in .png with a different line (such as imagereplaced.png), changing the previous lines like so:
imagereplaced.png
imagetwo.jpg
unrelatedline
imagereplaced.png
I’m sorry if I wasn’t clear with this in my original post
-
Hi, @aulumen-eulogy and All,
Sorry, but there’s still a problem ! In your list of replaced lines, below :
imagereplaced.png imagetwo.jpg unrelatedline imagereplaced.png
There are two identical lines
imagereplaced.png
?!Thus, two possibilities :
A) The part “replaced” is really a literal string and you do not mind having duplicates names of file. In that case, the following regex S/R should work :
-
SEARCH
(?i)\bimage.+\.png$
-
REPLACE
imagereplaced.png
Notes :
-
The
(?i)
part is an in-line modifier meaning that the search is insensitive to the case of letters -
The
\b
part is as assertion, saying that the string image must be preceded with a non-word character ( EOL, blank or symbol character ) -
The
.+
represents the longest area of characters, between the two strings image and .png, which must end each line, due to the final$
meta-character
B) The part, naned “replaced”, is different for each file. In that case, again… some explanations would be welcome :-))
Cheers,
guy038
-
-
@guy038
Many thanks for the help, A worked wonderfully (I replaced image with [a-z] so it’d work with all of the different files I needed to replace, but aside from that it was flawless).