Stupid /bin/bash tricks - better find + grep

this is a 3-arg function that lets you find files that contain a string.
it prints out the filename, followed by the matching lines with line numbers.
it’s defined in my .bashrc file as:

find2g() {
  find $1 -name "$2" -exec grep -l "$3" {} \; -exec grep -n "$3" {} \;
}

example:

~> find2g github/stan-dev/cmdstan/stan/src/stan/lang/ "*.[ch]pp" logical
github/stan-dev/cmdstan/stan/src/stan/lang//ast/sigs/function_signatures_def.hpp
266:        || name == "logical_negation";
296:      if (name == "logical_negation") return "!";
github/stan-dev/cmdstan/stan/src/stan/lang//generator/expression_visgen.hpp
189:        if (fx.name_ == "logical_or" || fx.name_ == "logical_and") {
192:          o_ << ") " << ((fx.name_ == "logical_or") ? "||" : "&&")
github/stan-dev/cmdstan/stan/src/stan/lang//grammars/expression_grammar_def.hpp
57:              [binary_op_f(_val, _1, "||", "logical_or",
65:              [binary_op_f(_val, _1, "&&", "logical_and",
73:               [binary_op_f(_val, _1, "==", "logical_eq",
78:                 [binary_op_f(_val, _1, "!=", "logical_neq",
86:               [binary_op_f(_val, _1, "<", "logical_lte",
90:                 [binary_op_f(_val, _1, "<=", "logical_lt",
94:                 [binary_op_f(_val, _1, ">", "logical_gte",
98:                 [binary_op_f(_val, _1, ">=", "logical_gt",
github/stan-dev/cmdstan/stan/src/stan/lang//grammars/semantic_actions.hpp
653:    struct logical_negate_expr : public phoenix_functor_ternary {
657:    extern boost::phoenix::function<logical_negate_expr> logical_negate_expr_f;
github/stan-dev/cmdstan/stan/src/stan/lang//grammars/semantic_actions_def.cpp
1219:                   << "    if you see an outer function logical_lt (<)"
1951:    void logical_negate_expr::operator()(expression& expr_result,
1955:        error_msgs << "logical negation operator !"
1961:      fun f("logical_negation", args);
1965:    boost::phoenix::function<logical_negate_expr> logical_negate_expr_f;
github/stan-dev/cmdstan/stan/src/stan/lang//grammars/term_grammar_def.hpp
126:                      [logical_negate_expr_f(_val, _1,
~> find2g github/stan-dev/cmdstan/stan/src/stan/lang "*.[ch]pp" logical
github/stan-dev/cmdstan/stan/src/stan/lang/ast/sigs/function_signatures_def.hpp
266:        || name == "logical_negation";
296:      if (name == "logical_negation") return "!";
github/stan-dev/cmdstan/stan/src/stan/lang/generator/expression_visgen.hpp
189:        if (fx.name_ == "logical_or" || fx.name_ == "logical_and") {
192:          o_ << ") " << ((fx.name_ == "logical_or") ? "||" : "&&")
github/stan-dev/cmdstan/stan/src/stan/lang/grammars/expression_grammar_def.hpp
57:              [binary_op_f(_val, _1, "||", "logical_or",
65:              [binary_op_f(_val, _1, "&&", "logical_and",
73:               [binary_op_f(_val, _1, "==", "logical_eq",
78:                 [binary_op_f(_val, _1, "!=", "logical_neq",
86:               [binary_op_f(_val, _1, "<", "logical_lte",
90:                 [binary_op_f(_val, _1, "<=", "logical_lt",
94:                 [binary_op_f(_val, _1, ">", "logical_gte",
98:                 [binary_op_f(_val, _1, ">=", "logical_gt",
github/stan-dev/cmdstan/stan/src/stan/lang/grammars/semantic_actions.hpp
653:    struct logical_negate_expr : public phoenix_functor_ternary {
657:    extern boost::phoenix::function<logical_negate_expr> logical_negate_expr_f;
github/stan-dev/cmdstan/stan/src/stan/lang/grammars/semantic_actions_def.cpp
1219:                   << "    if you see an outer function logical_lt (<)"
1951:    void logical_negate_expr::operator()(expression& expr_result,
1955:        error_msgs << "logical negation operator !"
1961:      fun f("logical_negation", args);
1965:    boost::phoenix::function<logical_negate_expr> logical_negate_expr_f;
github/stan-dev/cmdstan/stan/src/stan/lang/grammars/term_grammar_def.hpp
126:                      [logical_negate_expr_f(_val, _1,
~> 
1 Like

git grep -n logical src/stan/lang/ | cat is essentially equivalent but has more flexibility

1 Like