Re: Escaping grep
bodiccea <[email protected]> Sat, 17 Apr 2021 15:36:19 +0200
| 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.