找到变量

时间:2014-10-23 04:59:40

标签: c

目的:编写一个带有两个参数(directory和c var)的脚本,并在目录中搜索所有带C扩展名的文件。

必须打印包含第二个参数中变量的每一行。变量也应该完全匹配,包括大写,应该是一个完整的单词。

文件名应在带有变量

的行之前打印

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

虽然grep是一般工具,但有一个工具called ack专门用于搜索源代码。默认情况下,它以递归方式搜索目录树。它已经内置了哪些源文件扩展名与哪些语言相关联的知识。例如,要在目录树中搜索名称为c的{​​{1}}文件,请使用:

someName

注意:

  • ack --cc '\bsomeName\b' /path/to/ 告诉它搜索--cc - 扩展程序c.c.h.标识的语言文件。

  • .xs是要搜索的正则表达式。 \bsomeName\b表示单词边界。如果您想阻止\b匹配,请使用它。 anothersomeName完全支持ack正则表达式。

  • 默认情况下,搜索是递归的。如果您不想进入子目录,请使用perl

  • 如果您不喜欢任何默认设置,那么它非常易于配置。

在类似debian的系统上,-n被笨拙地重命名为ack,以避免与名为ack-grep的汉字转换器发生冲突。要安装,请运行ack。对于其他系统,请参阅How to install ack

答案 1 :(得分:0)

在这里,您似乎想使用grep来搜索目录中的所有文件。

阅读man grep可以帮助您解决这个问题,但特别值得关注的是--include=GLOB-r--recursive选项。

您可以使用递归标记来避免需要find,然后使用--include=标志来仅指定以特定扩展名结尾的文件。

答案 2 :(得分:0)

我个人从未使用ack因此无法发表评论,但grep对此非常有用

我使用此命令在“unisa”目录中查找包含扩展名为cpp和h的全名“name”的所有文件。

grep -wnr "name" --include *.cpp --include *.h unisa

来自手册页

-w  Select only those lines containing matches that form whole words.
-n  Prefix each line of output with the 1-based line number within its input file. (you may not want this, but I always use it)
-r Read all files under each directory, recursively
--include Search only files whose base name matches GLOB

我在示例中运行了我所有大学项目的目录中的命令,这是输出的示例

cos2614/assignment_1/question_1/question_1.cpp:15: "Enter your details in the format \"first name: surname: employee number\"");
cos2614/assignment_1/question_2/customer.cpp:3:Customer::Customer(QString name, QString id)
cos2614/assignment_1/question_2/customer.cpp:4:    : m_Name(name), m_ID(id), m_DeliveryAddress(), m_BillingAddress()
cos2614/assignment_1/question_2/test.cpp:12:    QString name, id, address;
cos2614/assignment_1/question_2/test.cpp:14:    cout << "Please enter your name: ";
cos2614/assignment_1/question_2/test.cpp:16:    name = cin.readLine();
cos2614/assignment_1/question_2/test.cpp:22:    Customer cust(name, id);
cos2614/assignment_1/question_2/customer.h:15:        Customer(QString name, QString id);
cos2614/assignment_1/question_5/static3.h:10:        Client(string name): m_Name(name), m_ID(s_SavedID++) { }