1

我需要解析一个文件并使用正则表达式作为分隔符的一部分从中获取某些字段。我以为我可以使用 perl 来做到这一点(?)。问题是我无法让它正常工作。这是一个我认为可以让我打印由一个空格分隔的字段(在本例中为一个或多个空格)的单行:

bash_prompt> perl -anF'/ +/' -e 'print "$F[0], $F[-1]\n"' build_outputfile

输出文件来自生成文件。

在这里,我想打印出第一个令牌和最后一个令牌。因此,在我的情况下,使用了哪个编译器以及编译了哪个文件。也许有更好的方法可以做到这一点,但现在我对为什么我的 perl one 班轮不起作用感到困扰。

无论如何,正则表达式 '/ +/ 似乎不起作用。我得到了一些意想不到的输出。也许 F 实际上并不想要正则表达式?当我用包含一个空格的“/ /”替换 F 的参数时,我仍然没有得到预期的输出。

任何人都可以帮忙吗?谢谢。

这里有一些测试代码供您尝试。将其保存在文件中:

g++ -c  -g  -Wall -I/codedir/src/CanComm/include -I/home/codemonkey/workspace/thirdparty/Boost -Wno-deprecated SCMain.cpp
g++ -c -g  -Wall -I./object/include -I./wrapper/include -I./Properties/include -I./Messaging/include -I/codedir/src/Logging/sclog/include ./object/SCObject.cpp ./object/RandNumGenerator.cpp ./object/ScannerConstraints.cpp ./object/ThreadSync.cpp ./object/SCData.cpp ./object/AirScanData.cpp ./object/ClusterData.cpp ./object/WarmupData.cpp ./object/SCCommand.cpp ./object/ScanCommands.cpp ./object/RCCommands.cpp ./object/ReconData.cpp ./object/UICommTool.cpp ./object/UIMsg.cpp ./object/UI2SCConversion.cpp ./object/RCMsg.cpp ./object/RCMessageInfo.cpp ./object/Utils.cpp ./object/ZBackupTable.cpp ./object/ZBackupFactory.cpp
g++ -c -g  -Wall -I./Properties/include -I/codedir/src/Logging/sclog/include -I./object/include -I/home/codemonkey/workspace/thirdparty/Boost  ./Properties/PropertyMap.cpp
4

3 回答 3

3

根据perldoc perlrun

-F模式

如果 -a 也有效,则指定要拆分的模式。模式可以用“//”、“”或''包围,否则将被放在单引号中。您不能在模式中使用文字空格。

我不得不承认:这是多么武断的限制!

于 2012-10-24T13:56:17.557 回答
2

对于您的问题,您实际上不需要将模式指定为默认模式,即空格可能对您足够好。

perl -anle 'print "$F[0], $F[-1]"' build_outputfile
于 2012-10-24T14:25:37.750 回答
0

您的正则表达式模式应该是这样的:

'/\s+/'

\s表示匹配任何空格

于 2012-10-24T13:46:09.800 回答