awk 'BEGIN {FS="\t"} {print $4}' tags | awk -F'(' '{print $1}' | uniq | xargs -I '{}' sh -c "echo -n '{}: '; awk '/^{}(/, /{/' {} | wc -l" 报错 awk: line 0: regular expression compile failed (missing ')')
时间: 2023-12-15 11:05:37 浏览: 139
这个报错可能是由于正则表达式的问题导致的,建议您检查一下代码中的正则表达式是否正确。
另外,根据您提供的代码,我发现其中存在一个问题:在第二个 awk 命令中,分隔符为左括号“(`)”时,需要用转义符“\”对其进行转义,否则会被解释为正则表达式中的特殊字符。因此,您可以将第二个 awk 命令修改为:
```
awk -F'[(]' '{print $1}'
```
这样应该就能够正确地提取出函数名了。如果您还有其他问题,欢迎继续咨询。
相关问题
awk 'BEGIN {FS="\t"} {print $4}' tags | awk -F:'(' '{print $1}' | uniq | xargs -I '{}' sh -c "echo -n '{}: '; awk '/^{}()/, /{/' {} | wc -l" awk: line 0: regular expression compile failed (missing ')')
这条命令是用来统计代码中每个函数的行数的,但是这个命令中的正则表达式有问题,缺少一个右括号。可以将命令修改为:
```bash
awk 'BEGIN {FS="\t"} {print $4}' tags | awk -F':' '{print $1}' | uniq | xargs -I '{}' sh -c "echo -n '{}: '; awk '/^{}()/, /{/' {} | wc -l"
```
这个命令的执行过程是:
1. 使用 awk 提取 tags 文件中每行的第四个字段,即函数名,并输出到下一个 awk 命令中;
2. 使用 awk 再次处理函数名,将每个函数名中的冒号和括号去除,然后去重,输出到 xargs 命令中;
3. 使用 xargs 将每个函数名作为参数传递给 sh 命令,然后执行后续命令;
4. 在 sh 命令中,先输出当前函数名,然后使用 awk 在代码文件中查找当前函数的起始行和结束行,然后使用 wc 命令统计行数。
需要注意的是,这个命令只能在 Linux 或 macOS 等类 Unix 系统上执行,因为其中使用了类 Unix 系统的命令和语法。
awk 'BEGIN {FS="\t"} {print $4}' tags | awk -F'[(]' '{print $1}' | uniq | xargs -I '{}' sh -c "echo -n '{}: '; awk '/^{}(/, /{/' {} | wc -l" 报错 awk: line 0: regular expression compile failed (missing ')')
这个命令的问题在于 `{` 和 `(` 是正则表达式中的特殊字符,需要进行转义才能正常匹配。
可以尝试修改成这样:
```
awk 'BEGIN {FS="\t"} {print $4}' tags | awk -F'[(]' '{print $1}' | uniq | xargs -I '{}' sh -c "echo -n '{}: '; awk '/^{}\\(/, /\\/{/' {} | wc -l"
```
在正则表达式中,`\\(` 和 `\\)` 表示匹配 `(` 和 `)` 字符,而不是正则表达式中的特殊字符。这样修改后,应该就可以正常运行了。
阅读全文