这是makefile
输出,我需要从中删除*.d
和*.o
个文件。我该怎么做?
gcc -c -m64 -march=x86-64 -Wall -Wno-strict-aliasing -DLINUX -D_GNU_SOURCE -DNDEBUG -I. -I../include -I -MD -MF out/target/mytree/mycode/build/linux.x86_64/expr.d -o out/target/mytree/mycode/build/linux.x86_64/obj/expr.o expr.cpp
我不想用whitespaces
拆分行,进行搜索,然后使用join将字符串放回去。
我能以其他方式做到吗?
答案 0 :(得分:3)
可能是这样的:
use strict;
use warnings;
open(my $src_file, "<", "test.txt") or die $!;
open(my $dst_file, ">", "dest.txt") or die $!;
while (<$src_file>) {
my $line = $_;
$line =~ s/\s+\S+\.[do]\s/ /g;
print $dst_file $line;
}
close($src_file);
close($dst_file);
它将改变:
gcc -c -m64 -march=x86-64 -Wall -Wno-strict-aliasing -DLINUX -D_GNU_SOURCE -DNDEBUG -I. -I../include -I -MD -MF out/target/mytree/mycode/build/linux.x86_64/expr.d -o out/target/mytree/mycode/build/linux.x86_64/obj/expr.o expr.cpp
to
gcc -c -m64 -march=x86-64 -Wall -Wno-strict-aliasing -DLINUX -D_GNU_SOURCE -DNDEBUG -I. -I../include -I -MD -MF -o expr.cpp
或者您可以使用此正则表达式:
$line =~ s/-(?:MF|o)\s+\S+\.[do]\s/ /g;
还要移除尾随的-MF
和-o
,以转换为:
gcc -c -m64 -march=x86-64 -Wall -Wno-strict-aliasing -DLINUX -D_GNU_SOURCE -DNDEBUG -I. -I../include -I -MD expr.cpp