我正在寻找按照以下方式做的事情
awk '/begin-regex/,/end-regex/'
但更高级一点。我想搜索整个函数,特别是在 Java 中,但我看不出它不适用于 C/C++ 或其他使用花括号 ({
和}
) 的函数。
这是一些示例代码(来自http://introcs.cs.princeton.edu/java/14array/Sample.java.html)
public class Sample {
public static void main(String[] args) {
int M = Integer.parseInt(args[0]); // choose this many elements
int N = Integer.parseInt(args[1]); // from 0, 1, ..., N-1
// create permutation 0, 1, ..., N-1
int[] perm = new int[N];
for (int i = 0; i < N; i++)
perm[i] = i;
// create random sample in perm[0], perm[1], ..., perm[M-1]
for (int i = 0; i < M; i++) {
// random integer between i and N-1
int r = i + (int) (Math.random() * (N-i));
// swap elements at indices i and r
int t = perm[r];
perm[r] = perm[i];
perm[i] = t;
}
// print results
for (int i = 0; i < M; i++)
System.out.print(perm[i] + " ");
System.out.println();
}
}
现在我只想拉出这个main
功能。
public static void main(String[] args) {
int M = Integer.parseInt(args[0]); // choose this many elements
int N = Integer.parseInt(args[1]); // from 0, 1, ..., N-1
// create permutation 0, 1, ..., N-1
int[] perm = new int[N];
for (int i = 0; i < N; i++)
perm[i] = i;
// create random sample in perm[0], perm[1], ..., perm[M-1]
for (int i = 0; i < M; i++) {
// random integer between i and N-1
int r = i + (int) (Math.random() * (N-i));
// swap elements at indices i and r
int t = perm[r];
perm[r] = perm[i];
perm[i] = t;
}
// print results
for (int i = 0; i < M; i++)
System.out.print(perm[i] + " ");
System.out.println();
}
很明显,我不能只寻找,main(.*?) {.*?}
因为那会在第二个循环结束时停止for
,回馈
public static void main(String[] args) {
int M = Integer.parseInt(args[0]); // choose this many elements
int N = Integer.parseInt(args[1]); // from 0, 1, ..., N-1
// create permutation 0, 1, ..., N-1
int[] perm = new int[N];
for (int i = 0; i < N; i++)
perm[i] = i;
// create random sample in perm[0], perm[1], ..., perm[M-1]
for (int i = 0; i < M; i++) {
// random integer between i and N-1
int r = i + (int) (Math.random() * (N-i));
// swap elements at indices i and r
int t = perm[r];
perm[r] = perm[i];
perm[i] = t;
}
这还不够。
如何修改这个简单的 awk 脚本以计算打开的大括号和关闭的大括号并忽略注释?如果它输出所有出现的函数,那将比第一次更好。
编辑:这以前不是很清楚,但我知道常规语言无法解决这个问题,这就是为什么我在 awk 中要求一些东西。我知道 awk 能够计数并且能够按照我的要求进行操作。