Re: Escaping grep

bodiccea <[email protected]> Sat, 17 Apr 2021 17:58:37 +0200
Newsgroups alt.comp.lang.shell.unix.bourne-bash
Organization Guest of ProXad - France
Message-ID <20210417175837.3c83dcab@lorien>
On Sat, 17 Apr 2021 15:36:19 +0200, bodiccea <[email protected]> wrote:
> You have 2 solutions:
> 1) use quotes instead of double quotes: '^\\usep', so that bash does
> not change anything.
> 2) using double quotes, force bash to preserve 2 backslash with the
> string "^\\\\usep"

As a general rule, when you are unsure about "real" strings sent to a
program (like grep in your case), you can always test them with printf,
I do it sometimes with complicated patterns.

Examples:
# your initial string
$ printf "%s\n" "^\\usep"
^\usep                           <-- passed to grep, incorrect

# with quotes
br@lorien:~/.claws-mail$ printf "%s\n" "^\\\\usep"
^\\usep                          <-- passed to grep, correct

# with double quotes
br@lorien:~/.claws-mail$ printf "%s\n" '^\\usep'
^\\usep                          <-- passed to grep, correct

bodi.