在我的makefile中,我调用了一个perl脚本,该脚本将返回包含文件路径,文件名,行号和错误消息的消息。我只需要文件路径和文件名。我的脚本将此消息打印到stdout,以便它自动显示在控制台中。
在我的makefile中,如何获取文件路径和文件名?我愿意使用grep,sed或tee或者最适合使用它们。
我的字符串是这样的:
Warning: <filepath>/<filename>: <line number> <some message>
例如:
Warning temp/output/dir/report.txt: 545 problem with parsing blah blah blah.
所以,我需要得到&#34; temp / output / dir / report.txt&#34;仅部分。最好的方法是什么?
答案 0 :(得分:3)
最简单的方法是使用shell的位置参数和参数扩展。即:
$ set -- $(echo Warning: temp/output/dir/report.txt: 545 problem ...)
echo $2
temp/output/dir/report.txt:
$ echo ${2%:} # Remove colon at the right
temp/output/dir/report.txt
这完全是POSIXy,并不依赖于任何基础。在您的情况下,您将使用
$ set -- $(script); echo ${2%:}
或者可能
$ set -- $(script 2>&1); echo ${2%:}
如果要提取的消息转到stderr而不是stdout。所有这些都假定消息是第一行。如果这个假设是假的,grep为'Warning:'字符串,它应该可以工作。