- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,假设我有这段代码
#include <stdio.h>
int main(void)
{
int x = 99;
int *p1, *p2;
char y[10] = "a"
// some code
// some code
return 0;
}
因此,在此代码中,有两个主要类型为 int
和 char
的变量。现在,假设我编写了至少 400 - 500 行的代码,其中初始化了 20-30 个变量。现在,我想制作一个 bash 脚本来查找这段代码中的变量是什么。我以这种方式开始 cat code.c | grep int
这将打印上述场景中的 int main void()
函数,并打印 int x =99
和 //some code
语句,但我想严格打印这些行 int x=99;
和 int *p1, *p2
而不是 Every 行。
现在,在上面的问题中,我也有一个变量数据类型char
,现在我如何以cat
之后的方式构建我的Bash脚本我grep仅特定数据类型,例如int
char
double
float
,是否有任何OR
有方法吗?或者有没有比 cat 和 Grep 更简单的方法来执行相同的操作?
所以我的最终输出应为 int x=99;
int *p1, *p2
, char y[10] = "a"
:)
期待您的回复。
最佳答案
您可以使用 grep
来查找以空格开头,后跟 int
或 char
的行,使用基本正则表达式就像这样简单:
$ grep '^[ ][ ]*\(int\|char\)' yourfile.c
int x = 99;
int *p1, *p2;
char y[10] = "a"
如果您有初始 tab
字符(或混合 空格
和 tab
),您可以使用 Perl 兼容的正则表达式:
$ grep -P '^[ \t]+(int|char)' yourfile.c
int x = 99;
int *p1, *p2;
char y[10] = "a"
我不知道这是否正是您正在寻找的,如果不是,请告诉我。还有其他 C 代码扫描器可以提取变量、函数等并进行总结,例如cproto
是我用过并且非常喜欢的一个。 Sourceforge 上还有许多其他内容,您可能还想查看。
说明(来自评论)
根据示例,很明显,在空白之后只需要 int
、char
等(例如错过 int main ()
声明)。考虑到这一点,我们使用基本正则表达式设置 grep 至少需要 1
(space
使用 BRE),或者如果是混合 搜索词之前可以使用 tab
和 space
(使用 PCRE)。仅处理空格,使用 BRE:
grep '^[ ][ ]*
或者如果处理混合空格和制表符,PCRE为
grep -P `^[ \t]+
将搜索^
锚定在行的开头,并使用BRE查找带有字符的空格
类 []
。为了处理至少一个空格,对于零
或更多额外空格
,我们添加一个额外的[ ]*
.
当涉及多个(或混合)空格
和制表符
(无法使用BRE轻松处理)时,PCRE本质上会执行以下操作:对于 space
和 tab
来说都是一样的,同时牺牲了 PCRE 提供的扩展表达式处理的一些可移植性。 ^[\t]+
将容纳一个
或更多
个space
或tab
实例搜索词之前的 > 字符。 +
要求字符类中的字符至少存在 1
或 更多 个匹配项。
当查找int
或char
时,基本的正则表达式格式是
\(int\|char\)
其中 (
和 |
在 BRE 中不保留特殊含义,并且必须在 PCRE 中转义形式很简单:
(int|char)
所以把它放在一起,它只是锚定一个或多个 space
的搜索(或使用 PCRE 混合 space
和 tab
)在 int
或 char
之前的字符来确定要显示的行。
希望有所帮助。
关于c - 使用 Grep 查找 C 文件的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930169/
我有一个文件 test.log。非常大的日志文件。它有不同级别的日志记录。例如,trace , debug , info , warning和 error . 显然trace级别消息只是高速发送垃圾邮
我正在经历一些事情,发现了我无法理解的事情, grep -v grep 这意味着什么?我知道 -v 开关将选择所有不匹配的行。但为什么是第二个grep? 这是完整的命令: ps -ef | grep
我使用 egrep 输出一些带有平台名称的行: XXX | egrep "i686-nptl-linux-gnu$|i686-w64-mingw32$|x86_64-unknown-linux-gnu
grep退出状态部分报告中的手册: EXIT STATUS The exit status is 0 if selected lines are found, and 1 if not
我试图返回多个字符串的第一次出现,即,我想从以下文本中选择第一次出现 1259、3009 和 1589 的行。 ADWN 1259 11:00 B23 ADWN 3009
我猜它不是 Perl 兼容的正则表达式,因为有一种特殊的 grep具体来说就是 PCRE。什么是grep最相似? grep有什么特别的怪癖吗?我需要知道什么? (我习惯了 Perl 和 PHP 中的
有没有办法让 grep 从与搜索表达式匹配的文件中输出“单词”? 如果我想在多个文件中查找“th”的所有实例,我可以这样做: grep "th" * 但是输出会是这样的(粗体是我写的); some-t
我有许多(近 100 个)大 csv 文件,第一列中有 sellID。我知道某些 sellID 在 2 个或更多文件中重复 2 次或多次。是否可以使用 grep 找到所有重复的 sellID(创建映射
我有一个文件中的文件列表。该列表很大,并且文件名是非标准的:这意味着有些文件包含空格、非 ASCII 字符、引号、单引号... 因此,将庞大的文件列表作为参数传递给 grep 并不是一种选择: 因为我
我想在 shell 脚本中使用 grep 和两个变量 var = match cat list.txt | while read word_from_list; do grep "$word_
我有一个大文件,其中每一行都包含一个子字符串,例如 ABC123。如果我执行 grep ABC file.txt 或 grep ABC1 file.txt 我按预期返回这些行,但如果我执行 grep
当我执行以下 grep 时,我得到的结果我无法向自己解释: host:/usr/local/tomcat > grep '-XX:PermSize=256m' * RELEASE-NOTES:
这个问题在这里已经有了答案: grep recursively for a specific file type on Linux (5 个回答) 关闭4年前。 要在子目录中查找所有带有 .out 扩
有什么方法可以让我在搜索某些东西时使用 grep 忽略某些文件,相当于 svnignore 或 gitignore 的东西?我通常在搜索源代码时使用类似的东西。 grep -r something *
有没有办法让 grep 从匹配搜索表达式的文件中输出“单词”? 如果我想在多个文件中找到“th”的所有实例,我可以这样做: grep "th" * 但是输出会是这样的(粗体是我的); some-tex
我是 awk/sed 的完全菜鸟,所以如果我在这里遗漏了一些明显的东西,请原谅我。 基本上我正在尝试做一个嵌套的 grep,即类似于: grep $value `exim -Mvh $(`exim -
我正在尝试编写下载 node.js source 的脚本和 corresponding SHASUMS256.txt ,校验和,grep OK,不返回任何结果,使用 grep 的 -q 标志成功退出代
在 grep "str"* 这是否意味着 grep 执行 grep 的所有内容? 那么 grep -r "str". 的结果比前一个多 最佳答案 当您运行 grep str * 时,shell 将扩展
我正在尝试 grep 文件以查找匹配项的确切出现,但我也得到了更长的虚假匹配项: grep CAT1717O99 myfile.txt -F -w 输出: CAT1717O99 CAT1717O99
我有一个文件,其中包含我希望通过未指定分析运行的标识符(每行一个)。如果一切运行正常,分析将输出具有相同标识符的另一个列表(不一定按相同顺序)。 然而,事实证明,对某些输入标识符没有进行分析,并且这些
我是一名优秀的程序员,十分优秀!