Perl - 只需复制函数名称

时间:2013-08-01 06:46:48

标签: regex perl

我有一个包含以下数据的文本文件 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 个答案:

答案 0 :(得分:3)

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

查找一个左括号及其后的任何内容,并将其全部删除。 -p表示逐行读取输入文件参数或标准输入,并在每行之后,在$_选项的参数中的脚本之后打印-e左边的内容执行。

答案 1 :(得分:1)

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

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

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

perl -nE 'say /( [^()]+ )/x' file

答案 2 :(得分:0)

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

perl -ne 'print +(split(/\(/))[0] . "\n";' inputfile

答案 3 :(得分: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
>