10

Does silver_searcher support specifying multiple search expressions something like -e in grep?

I could not find any option in the document/help.

Chad Nouis
  • 6,861
  • 1
  • 27
  • 28
justrajdeep
  • 855
  • 3
  • 12
  • 29

3 Answers3

16

You might want to search with both Boolean operators:

  • AND: ag -l pattern1 | xargs ag -l pattern2 | xargs ag 'pattern1|pattern2'
  • OR: ag 'pattern1|pattern2'
  • NOT: ag -v 'pattern'

From manual:

-l --files-with-matches: Only print the names of files containing matches, not the matching lines. An empty query will print all files that would be searched.

-v --invert-match: Match every line not containing the specified pattern.

Pablo Bianchi
  • 1,824
  • 1
  • 26
  • 30
  • `Add -d '\n' to xargs to handle spaces on filenames.` That's a really useful tip. I usually try to mess with `-0`. What do you do if the path has parentheses or ~ in it? – Daniel Kaplan Mar 08 '22 at 23:38
9

According to the documentation, it doesn't support multiple search patterns. That said, it does support using parallel, so you can fire off multiple instances of ag for a multi-search:

echo "foo\nbar\nbaz" | parallel 'ag --parallel --color "{}" *' 

The output using the --parallel switch will be filename, linenumber and match. If that's too fancy, you can always use the OR operator in your pattern search:

ag --color "foo|bar|baz" * 
gregory
  • 10,969
  • 2
  • 30
  • 42
5

Yes, you can search for multiple patterns by separating each pattern with a vertical line character (|):

ag 'pattern1|pattern2'
Chad Nouis
  • 6,861
  • 1
  • 27
  • 28