Hi Victoria

This is a great group indeed. I find regex101 very useful for playing
around. I know BBEdit has a great regex playground too. In regex101 you can
save a search with a unique URL and it'll always be there, e.g. for others
to refer too. I put one of the examples above here
<https://regex101.com/r/WDvs2s/1>. I have a lot of regex patterns that an
external program uses and I just have a sheet with links to lots of
regex101 pages.

All the best.

Regards
Kaveh

On Sat, 27 Jan 2024 at 15:24, Victoria Bampton <[email protected]>
wrote:

> Thank you very much, especially for the breakdown of what the different
> elements do. I've learned a few new tricks from this thread, so I'll be
> watching the group carefully in future.
>
> Victoria
>
> On Friday, January 26, 2024 at 5:44:04 PM UTC Benjamin Irwin wrote:
>
>> There are a couple of other options for search and replace.  SED and AWK
>> are designed specifically for that purpose.  The following is an example
>> taken from "tldr"; a great resource for helpful linux documentation and
>> examples.
>>
>> *sed*
>>
>> Edit text in a scriptable manner. See also: awk, ed. More information:
>> https://www.gnu.org/software/sed/manual/sed.html.
>>
>>
>>    - Replace all apple (basic regex) occurrences with mango (basic
>>    regex) in all input lines and print the result to stdout:
>>
>> {{command}} | sed 's/apple/mango/g'
>>
>>    - Replace all apple (extended regex) occurrences with APPLE (extended
>>    regex) in all input lines and print the result to stdout:
>>
>> {{command}} | sed -E 's/(apple)/\U\1/g'
>>
>>    - Replace all apple (basic regex) occurrences with mango (basic
>>    regex) in a specific file and overwrite the original file in place:
>>
>> sed -i 's/apple/mango/g' {{path/to/file}}
>>
>>    - Execute a specific script [f]ile and print the result to stdout:
>>
>> {{command}} | sed -f {{path/to/script.sed}}
>>
>>    - Print just the first line to stdout:
>>
>> {{command}} | sed -n '1p'
>>
>>    - [d]elete the first line of a file:
>>
>> sed -i 1d {{/path/to/file}}
>>
>>    - [i]nsert a new line at the first line of a file:
>>
>> sed -i '1i\your new line text\' {{/path/to/file}}
>>
>> On Friday, January 26, 2024 at 10:56:40 AM UTC-5 Neil Faiman wrote:
>>
>>> There may be a way of doing this with a single operation. Usually, when
>>> approaching a problem like this, I just find a find-and-replace that will
>>> do the job if applied repeatedly some smallish number of times.
>>>
>>> So, we’ll start out with a pattern that will leave the “hash-mark
>>> lowercase-string underscore” prefix intact as a marker, find the first
>>> subsequent uppercase letter in the fragment (if any), lowercase it, and
>>> insert the hyphen.
>>>
>>> Find: (?i)(href="[a-zA-Z/-]+\.x?html#)(?-i)([a-z]+?_[-a-z]*)([A-Z])
>>>
>>> Replace: \1\2-\l\3
>>>
>>>
>>> Breaking this down:
>>>
>>>    - (?i) Means that the pattern is case-insensitive.
>>>    - (href="[a-zA-Z/-]+\.x?html) matches (and captures) the initial
>>>    part of a link URL string (to make sure that we don’t inadvertently
>>>    transform arbitrary text in the document).
>>>    - (?-i) switches the remainder of the pattern to case-sensitive.
>>>    - (#[a-z]+?_[-a-z]*) matches and captures
>>>       - A string of lowercase letters followed by an underscore
>>>       - A possibly empty string of lowercase letters and hyphens.
>>>    - ([A-Z]) matches and captures the first uppercase letter in the
>>>    fragment.
>>>
>>>
>>> The replacement string consists of everything up to the uppercase letter
>>> unchanged; a hyphen; and the uppercase letter, lower-cased. (“\l” means
>>> “lower-case the next character in the replacement string.)
>>>
>>> If we apply this find-and replace to your example string
>>>
>>> <a href=
>>> "/premium-classic/before-you-start.xhtml#sub_KeepingLightroomUpdated">Keeping
>>> Lightroom Updated</a>
>>>
>>> We will get
>>>
>>> <a href=
>>> "/premium-classic/before-you-start.xhtml#sub_-keepingLightroomUpdated">Keeping
>>> Lightroom Updated</a>
>>>
>>> Applying it repeatedly, we get
>>>
>>> <a href=
>>> "/premium-classic/before-you-start.xhtml#sub_-keeping-lightroom-updated"
>>> >Keeping Lightroom Updated</a>
>>>
>>> So you want to apply this with a  find-and-replace-all to the entire
>>> document repeatedly until it doesn’t do anything any more. (Since it’s a
>>> no-op if it doesn’t match anything, you could just apply it five, or ten,
>>> or twenty times — whatever seems like a reasonably upper limit on the
>>> number of words in the fragment.)
>>>
>>> Now we don’t need to marker any more, and we have an extra hyphen, so we
>>> will use a second pattern to clean that up:
>>>
>>> Find: (?i)(href="[a-zA-Z/-]+\.x?html#)(?-i)[a-z]+?_-
>>>
>>> Replace: \1
>>>
>>>
>>> Do a find-and-replace-all, and this will remove the “lower-case-string
>>> underscore hyphen” from the start of each fragment:
>>>
>>>  <a href=
>>> "/premium-classic/before-you-start.xhtml#keeping-lightroom-updated">Keeping
>>> Lightroom Updated</a>
>>>
>>> Regards,
>>> Neil Faiman
>>>
>>> On Jan 26, 2024, at 6:06 AM, Victoria Bampton <
>>> [email protected]> wrote:
>>>
>>> There's clearly lots of experience here... can anyone tell me if this is
>>> possible to do a find/replace GREP?
>>>
>>> Links like those following are spread throughout a series of documents.
>>> I need to change the bit after the hash (e.g., #sub_InstallingLightroom) to
>>> remove the chunk before the underscore, put a hyphen before each uppercase
>>> character, and change the uppercase to lowercase (e.g., it becomes
>>> #installing-lightroom). That could be multiple finds/replacements, as I can
>>> deal with some of it, but I'm getting stuck on targeting and transforming
>>> those uppercase characters. Is it doable? Any bright ideas would be greatly
>>> appreciated!
>>>
>>> <a
>>> href="/premium-classic/before-you-start.xhtml#sub_InstallingLightroom">Installing
>>> Lightroom</a>
>>> <a
>>> href="/premium-classic/before-you-start.xhtml#box_MultipleComputers">Multiple
>>> Computers</a>
>>>  <a
>>> href="/premium-classic/before-you-start.xhtml#sub_KeepingLightroomUpdated">Keeping
>>> Lightroom Updated</a>
>>> <a
>>> href="/premium-classic/managing-your-photos.xhtml#sub_ManagingFoldersInLightroomAndOnTheHardDrive">Managing
>>> Folders in Lightroom and on the Hard Drive</a>
>>> <a
>>> href="/premium-classic/managing-your-photos.xhtml#sub_ChangingTheFolderStructure">Changing
>>> the Folder Structure</a>
>>>
>>> --
>>> This is the BBEdit Talk public discussion group. If you have a feature
>>> request or need technical support, please email "[email protected]"
>>> rather than posting here. Follow @bbedit on Twitter: <
>>> https://twitter.com/bbedit>
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "BBEdit Talk" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/bbedit/f3743619-5c95-4161-8107-b81affbdd6dan%40googlegroups.com
>>> <https://groups.google.com/d/msgid/bbedit/f3743619-5c95-4161-8107-b81affbdd6dan%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> --
> This is the BBEdit Talk public discussion group. If you have a feature
> request or need technical support, please email "[email protected]"
> rather than posting here. Follow @bbedit on Twitter: <
> https://twitter.com/bbedit>
> ---
> You received this message because you are subscribed to the Google Groups
> "BBEdit Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/bbedit/6bb20c24-2ca5-4858-9774-a33465439112n%40googlegroups.com
> <https://groups.google.com/d/msgid/bbedit/6bb20c24-2ca5-4858-9774-a33465439112n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>


-- 
Kaveh Bazargan PhD
Director
River Valley Technologies <http://rivervalley.io> ● Twitter
<https://twitter.com/rivervalley1000> ● LinkedIn
<https://www.linkedin.com/in/bazargankaveh/> ● ORCID
<https://orcid.org/0000-0002-1414-9098> ● @[email protected]
<https://mastodon.social/@kaveh1000>
*Accelerating the Communication of Research*

*
<https://www.linkedin.com/posts/bazargankaveh_ismte-innovation-award-recipient-kaveh-bazargan-activity-7039348552526921728-XAEB/?utm_source=share&utm_medium=member_desktop>
 [image:
https://rivervalley.io/gigabyte-wins-the-alpsp-scholarly-publishing-innovation-award-using-river-valleys-publishing-technology/]
<https://rivervalley.io/gigabyte-wins-the-alpsp-scholarly-publishing-innovation-award-using-river-valleys-publishing-technology/>*

-- 
This is the BBEdit Talk public discussion group. If you have a feature request 
or need technical support, please email "[email protected]" rather than 
posting here. Follow @bbedit on Twitter: <https://twitter.com/bbedit>
--- 
You received this message because you are subscribed to the Google Groups 
"BBEdit Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/bbedit/CAJ2R9pgUFdsT14ZKWYDONXkAo_5sviDpmRj4Nrj2tvAmT_PUTg%40mail.gmail.com.

Reply via email to