I am doing a file search and replace for occurrences of specific words in perl. I’m not usually much of a perl or regex user. I have searched for other regex questions here but I couldn’t find one which was quite right so I’m asking for help. My search and replace currently looks like this:
s/originalword/originalword_suffix/g
This matches cases of originalword that appear in the middle of another word, which I don’t want. In my application of search and replace, a whole word can be defined as having the letters of the latin alphabet in lowercase or capital letters and the digits 0-9 and the symbol _ in any uninterrupted sequence. Anything else besides these characters, including any other symbols or any form of whitespace including line breaks or tabs, indicate operations or separators of some kind so they are outside the word boundaries. How do I modify my search and replace to only match whole words as I’ve defined them, without matching substrings?
Examples:
in the case that originalword = cat and originalword_suffix = cat_tastic
:cat { --> :cat_tastic {
:catalog { --> no change
Use the \b anchor to match only on a word boundary:
Although Perl has a slightly different definition of what a “word” is. Reading the perlre reference guide a couple of times might help you understand regexps a bit better.
Running perl -pi -e “YOUR_REGEXP” in a terminal and entering in lines of text can help you understand and debug what a particular regexp is doing.