egrep поиск слова + следующая 1 строка

Итак, объединение этого для вашего конкретного примера:

#!/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"
0
27.06.2017, 16:12
2 ответа

Вы можете сделать это с помощью чистого 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;
    }
}
0
28.01.2020, 02:19

Функция отображения дополнительных строк до или после совпадения grep не предусмотрена в собственном egrep Solaris, для этого вам нужно будет использовать grep GNU.

В зависимости от того, какую версию Solaris вы используете, это можно найти в /usr/sfw/bin (Solaris 10 )или /usr/gnu/bin (Solaris 11 ). необходимо установить его, если его еще нет.

4
28.01.2020, 02:19

Теги

Похожие вопросы