Fabrizio and All,
From your post, I tried to find a generic way to achieve this kind of question, with regexes ! Please, just consider my solution as, only, one, among all the possible solutions !
The Fabrizio’s goal is to perform a Search/Replacement on a line, ONLY IF a SPECIFIC condition is true on that particular line
I would use the general regex syntax, below :
(Regex_Condition)[^@\r\n]*$|(Search_Regex)(?=.*@)|@
(?1$0@)(?2Replacement_Regex)
IMPORTANT :
Go back to the very beginning of your current file
In the Replace dialog, check the Regular search mode
Check, preferably, the Match case option
Click TWICE on the Replace All button
NOTES :
The arobase character @, is, simply, any single character, which DOES NOT exist in your current file. and preferably, NOT a meta-character of regular expressions. So, according to your file’s contents, you can choose, for instance, the ! character, the # character, the % character, the & character, the = character, the _ character, …
Regex_Condition represents the regex that satisfies the specific condition, which allows the associated Search/Replacement. Of course, Regex_Condition may be, also, a simple literal string, even a single character !
Search_Regex represents, of course, the area of text, which will be replaced. As above, Search_Regex may be, only, a simple literal string, even a single character !
Replacement_Regex is, obviously, the regex to generate the text that will replace the area matched by the Search_Regex
Below, I’ll expose 3 different examples ( The Fabrizio’s one and two others )
Regex_Condition : ^Value= Search_Regex : \bbla\b Replacement_Regex : blue
Regex_Condition : \b\d\d-\d\d-\d\d\b Search_Regex : [a-z] Replacement_Regex : \u\2
Regex_Condition : \d$ Search_Regex : [[:alpha:]]+ Replacement_Regex : <\2>
In the first case, we’ll replace the lowercase word bla, with the word blue, ONLY on lines beginning with the exact string Value=
( Fabrizio’s problem )
In the second case, we’ll replace any lowercase letter, with the same uppercase letter, ONLY on lines that contain a date, of the general form xx-xx-xx, at any position of the line
In the third case, we’ll replace any set of uppercase or lowercase letters, with the same set, surrounded by the two angle brackets, ONLY, if the current line ends with a digit
To see the results of each example, I’ll use the SAME 10 lines test example, below :
Value= bla bla testblatest bla
That's only "bla bla" speech
My NEXT bithday falls on 19-05-16
Every 25-12, Chistmas is celebrated
Value= Test of bla and BLA
Christmas is celebrated each 25-12
On the 01-01-17, we'll wish a Good New Year
Don't change the word "bla", in that TEST line no 8
01-01-00 was the first day OF THAT century
Value= bla blabla bla
So the first example :
(^Value=)[^@\r\n]*$|(\bbla\b)(?=.*@)|@
(?1$0@)(?2blue)
would give the changed text ( Lines 1, 5 and 10 ), below :
Value= blue blue testblatest blue
That's only "bla bla" speech
My NEXT bithday falls on 19-05-16
Every 25-12, Chistmas is celebrated
Value= Test of blue and BLA
Christmas is celebrated each 25-12
On the 01-01-17, we'll wish a Good New Year
Don't change the word "bla", in that TEST line no 8
01-01-00 was the first day OF THAT century
Value= blue blabla blue
The second example :
(\b\d\d-\d\d-\d\d\b)[^@\r\n]*$|([a-z])(?=.*@)|@
(?1$0@)(?2\u\2)
would give the changed text ( Lines 3, 7 and 9 ), below :
Value= bla bla testblatest bla
That's only "bla bla" speech
MY NEXT BITHDAY FALLS ON 19-05-16
Every 25-12, Chistmas is celebrated
Value= Test of bla and BLA
Christmas is celebrated each 25-12
ON THE 01-01-17, WE'LL WISH A GOOD NEW YEAR
Don't change the word "bla", in that TEST line no 8
01-01-00 WAS THE FIRST DAY OF THAT CENTURY
Value= bla blabla bla
Finally, the third example :
(\d$)[^@\r\n]*$|([[:alpha:]]+)(?=.*@)|@
(?1$0@)(?2<\2>)
would give the changed text ( Lines 3, 6 and 8 ), below :
Value= bla bla testblatest bla
That's only "bla bla" speech
<My> <NEXT> <bithday> <falls> <on> 19-05-16
Every 25-12, Chistmas is celebrated
Value= Test of bla and BLA
<Christmas> <is> <celebrated> <each> 25-12
On the 01-01-17, we'll wish a Good New Year
<Don>'<t> <change> <the> <word> "<bla>", <in> <that> <TEST> <line> <no> 8
01-01-00 was the first day OF THAT century
Value= bla blabla bla
NOTES :
Throughout these 3 examples, the lines 2 and 4, which do not begin with the string Value= nor end with a digit and which do not contain any date, remain UNCHANGED
For a correct behaviour of the proposed regexes, don’t forget to click, TWICE, on the Replace All button
Best Regards,
guy038
P.S. :
The underlined idea, about these general regexes, below :
(Regex_Condition)[^@\r\n]*$|(Search_Regex)(?=.*@)|@
(?1$0@)(?2Replacement_Regex)
is :
Add a specific character ( @, or else, not used in current file ) at the end of EACH line that satisfies the Regex_Condition ( 1st S/R )
Perform the wanted S/R, ONLY on the lines that end with the @ character ( or else ) and finally delete that extra character, at the end of each concerned line ( 2nd S/R )
As usual, I could give some extra information about these regexes, if needed !