0

我有一个文本文件,其中包含以下数据 INPUT

ChainCtrlBuildChain() : ChainController.c
ChainCtrlDumpChain() : ChainController.c
ChainCtrlDumpChanCallback() : ChainController.c
ChainCtrlExit() : ChainController.c
ChainCtrlGetBitStreamChan() : ChainController.c
ChainCtrlInit() : ChainController.c

我只想将函数名称复制到另一个文本文件中。

需要的输出

ChainCtrlBuildChain
ChainCtrlDumpChain
ChainCtrlDumpChanCallback
ChainCtrlExit
ChainCtrlGetBitStreamChan
ChainCtrlInit

通过使用 user4035 代码

  $text =~ s/\s:\s.*//g;

我在函数体之外得到了“()”,比如

ChainCtrlBuildChain()
ChainCtrlDumpChain()    

任何提示。我该怎么做。

我需要制作一个通用代码,因为函数名称和类名称将根据用户输入而有所不同。

4

4 回答 4

3
perl -p -e 's/\(.*//' input.file

寻找一个左括号和它后面的任何内容,然后将其全部删除。这-p意味着逐行读取输入文件参数或标准输入,并在每一行之后,打印选项$_参数中的脚本执行后剩下的内容。-e

于 2013-08-01T06:52:18.740 回答
1

它从每一行捕获第一个字符串并打印出来,

perl -nE 'say /(\w+)/' file

如果方法名之前还有类名(即。class::method

perl -nE 'say /( [^()]+ )/x' file
于 2013-08-01T07:35:40.240 回答
0

您可以使用split来获取输入的所需部分:

perl -ne 'print +(split(/\(/))[0] . "\n";' inputfile
于 2013-08-01T07:24:34.773 回答
0
perl -lne 'print $1 if(/(.*)\(\)/)' your_file

或在 awk 中:

awk -F"\(" '{print $1}' your_file

测试如下:

> perl -lne 'print $1 if(/(.*)\(\)/)' temp
ChainCtrlBuildChain
ChainCtrlDumpChain
ChainCtrlDumpChanCallback
ChainCtrlExit
ChainCtrlGetBitStreamChan
ChainCtrlInit
> awk -F"\(" '{print $1}' temp
ChainCtrlBuildChain
ChainCtrlDumpChain
ChainCtrlDumpChanCallback
ChainCtrlExit
ChainCtrlGetBitStreamChan
ChainCtrlInit
> 
于 2013-08-01T07:51:48.423 回答