在Linux中,我试图删除文本文件中的部分路径。完整路径是:
\服务器/ GLB /数据/目录/变种/ LOC2 /日志/ 123456.log
我试图简单地从字符串中删除glb / data /给我:
\服务器/目录/变种/ LOC2 /日志/ 123456.log
我一直试图用sed和perl无济于事。 这将插入到运行的脚本中以创建链接并将其插入到Oracle表中。
测试文件中还有其他链接,因此我认为cut命令无效。
有什么想法吗?
答案 0 :(得分:1)
这里有一些适用于sed的bash:
file_name='\server/glb/data/dir/var/loc2/log/123456.log'
echo $file_name | sed -e 's,glb/data/,,'
将打印剥离的路径,将其保存在var
中new_name=$(echo $file_name | sed -e 's,glb/data/,,')
同样在perl中你可以做到
my $file_name='\server/glb/data/dir/var/loc2/log/123456.log';
$file_name =~ s,glb/data/,,;
答案 1 :(得分:1)
这似乎很简单:
use strict;
use warnings;
use feature qw(say);
my $path = '\server/glb/data/dir/var/loc2/log/123456.log'
say $path =~ s|/glb/data||gr;
# \server/dir/var/loc2/log/123456.log
根据您的平台,上述情况可能会失败。以下是执行此操作的更安全的方法:
use strict;
use warnings;
use English qw(-no_match_vars);
use feature qw(say);
use File::Basename;
sub remove_dirs_from_path {
my ( $path, @to_remove ) = @_;
my $path_separator = $OSNAME =~ m/MSWin32/ ? '\\' : '/';
my ($filename, $directory, undef) = fileparse($path);
my @dirs_to_keep;
foreach my $dir ( split $path_separator, $directory ) {
next if grep { $dir eq $_ } @to_remove;
push @dirs_to_keep, $dir;
}
return join($path_separator, @dirs_to_keep, $filename);
}
say remove_dirs_from_path(
'\server/glb/data/dir/var/loc2/log/123456.log',
qw(glb data)
);