У меня есть несколько файлов с такими именами:
01_dpm_gsi_182.sl5
02_dpm_devel_gsi_182.sl5
03_DPM_DSI_181.sl5
04_globus_httpd_122.sl5
05_globus_httpd_client_cgi_132.sl5
Как я могу переименовать эти файлы, чтобы получить что-то вроде:
01_dpmgsi_s2011e01.sl5
02_dpmdevelgsi_s2011e02.sl5
....
....
Ближе всего мне предложили вот так:
#!/usr/bin/perl -n
if (/^([^_]+)_(.+)_([^.]+)([.].+)$/) {
my $s = $&;
my $x = $1;
my $y = $2;
my $z = 2011;
my $e = $4;
$y =~ s/_//g;
print "mv $s ${x}_${y}_s${z}e$x$e\n"
}
, а затем используйте его так:
# ls | perl -n reName.pl > output
# bash ./output
Есть ли лучший способ или однострочник, чтобы сделать это, возможно, используя sed / awk? Ура !!