Итак, объединение этого для вашего конкретного примера:
#!/bin/bash
filename='e141107140847.pdf'
echo Given file name ${filename} -
case ${filename:1:2} in
14)
mapping="SDUXS"
;;
*)
mapping="XXXXX"
;;
esac
month="${filename:3:2}"
year="20${filename:7:2}"
location="${filename:9:4}"
echo New filename - ${year}_${month}_${mapping}_${location}.pdf
, кажется, дает результат, который вы ищете. Разверните оператор case..esac
для всех ваших сопоставлений и оберните for имя файла в *.pdf
, и вы сможете подтвердить вывод; затем просто измените echo
на:
mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"
Вы можете сделать это с помощью чистого perl
, который является очень простым инструментом, доступным почти в каждой системе.
#!/usr/bin/env perl
use warnings;
use strict;
my $matched = 0;
while (<>)
{
if (/PATTERN/) { #for example /.2.*3/
print;
$matched = 1;
} elsif ($matched) {
print;
$matched = 0;
}
}
Функция отображения дополнительных строк до или после совпадения grep не предусмотрена в собственном egrep Solaris, для этого вам нужно будет использовать grep GNU.
В зависимости от того, какую версию Solaris вы используете, это можно найти в /usr/sfw/bin (Solaris 10 )или /usr/gnu/bin (Solaris 11 ). необходимо установить его, если его еще нет.