Grep表示单次和多次出现'[]'

时间:2017-05-17 22:13:18

标签: regex bash shell grep

我有一个C源头文件:

const int my_2dim_array[1][2];
const int my_2dim_array2[2][3];
const int my_3dim_array1[3][4][5];  
const int my_3dim_array2[1][2][3];
const int x_array[3];
const int y_array[4];

我怎样才能找到 -

  • 仅限1-dim数组变量

  • 仅限2-dim数组变量

  • 仅限3-dim数组变量

单独的命令没问题。

我试过

grep 'const ' header.h | grep '].*[' 

然后它会出现'Invalid regular expression'错误(在这里找到2-dim数组)

1 个答案:

答案 0 :(得分:3)

只获得1-dim数组:

$ grep -E '[^]](\[[[:digit:]]+\]);' file.h
const int x_array[3];
const int y_array[4];

仅获取二维数组:

$ grep -E '[^]](\[[[:digit:]]+\]){2};' file.h
const int my_2dim_array[1][2];
const int my_2dim_array2[2][3];

仅获取3-D数组:

$ grep -E '[^]](\[[[:digit:]]+\]){3};' file.h
const int my_3dim_array1[3][4][5];  
const int my_3dim_array2[1][2][3];

正则表达式的工作原理:

  • [^]] matches any character except]`。

  • (\[[[:digit:]]+\])匹配任何维度序列:[后跟数字后跟]。这个表达式都在parens (...)内部,因此我们可以将重复因子应用于整个序列。

  • {3}是一个重复因子,适用于维度序列。

  • ;匹配最后一个分号。

限制:此c解析器将允许此简单正则表达式未考虑的许多内容。