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.
