Re: Escaping grep

bodiccea <[email protected]>
Newsgroups alt.comp.lang.shell.unix.bourne-bash
Organization Guest of ProXad - France
Message-ID <20210417153619.6d991200@lorien>
On Sun, 21 Feb 2021 15:35:55 -0600, "Michael F. Stemper"
<[email protected]> wrote:

> I wanted to see which LaTeX packages I was using for a particular
> project, so I did:
> 
> user@host$ grep -h "\\usep" *tex | sort | uniq
> % \usepackage{array} % for math mode columns in tabular
> % \usepackage{graphicx}
> % \usepackage{longtable}
> % \usepackage{mathrsfs} % for mathscr
> % \usepackage{tikz-cd} % for commutative diagrams
> \usepackage{amsmath} % for implication and align*
> \usepackage{amssymb} % for black-board set names
> \usepackage{fancyhdr}
> \usepackage{geometry}
> \usepackage{parskip}
> user@host$
> 
> However, that showed unused packages as well. So I tried
> anchoring my grep to the beginning of the line, and got:
> 
> user@host$ grep -h "^\\usep" *tex | sort | uniq
> user@host$
> 
> Why isn't this working? What am I overlooking? How
> should I have said it?

There is no issue with the grep expression itself. The problem is
with bash handling of strings: You use " (double quotes) around
your expression, asking bash to interpret the contents.

bash will replace "^\\usep" with "^\usep" *before passing it to grep*.
grep then will remove special meaning for following char (u) - no
special meaning in this case.
The result is that grep will just look for lines starting with "u".

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"

Sorry for late answer, I just joined this group.

And yes, it is a pure 'bash' question, not a 'grep' question as I saw in
another answer :)

bodi.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.