如何在bash脚本中使用grep命令搜索一行,但只打印该行的某些部分,特别是不包括单词本身?



我希望使用Bash脚本列出C文件中的所有头文件

#include <stdio.h> // in output it should print stdio.h

就个人而言,我可能会使用sed:

sed -n -e 's/^#include[[:space:]]*[<"]([^>"]*)[>"].*/1/p' "$@"

和我可能在#之前和#之后放一个[[:space:]]*单元,以允许可选的间距。这涵盖了绝大多数情况。你可以有

#define STDIO_H <stdio.h>
#include STDIO_H

,脚本不会发现它。您也可以在材料中使用反斜杠-换行符,而脚本也不会发现这一点。并且它不处理嵌入在

行的注释。
#include <stdio.h>  // This one is detected OK
/*#*/#/*$*/include
/
* This one is not!
*
/
<stdlib.h>

哦,我不在乎。任何编写像第二个#include这样的代码的人,除了作为对编译器的折磨测试外,都应该受到鄙视,不允许将他们的代码检入版本控制系统。(注意:我提前在代码中使用了三字符)

不需要任何bash脚本。grep一行代码就可以完成这项工作。

grep -oP "#includes*<K[^>]*" file

K将在最后打印之前匹配的字符。使输出不包含#include<部分

最新更新