我有一个包含以下数据的文本文件 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()
任何提示我都可以这样做。
我需要制作一个通用代码,因为功能名称和类别名称将根据用户输入的不同而不同。
答案 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
>