Предположим, мы хотим заменить последние 7
строк следующей последовательности сценарием оболочки и реализацией GNU sed
:
$ seq 20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Шаг 1: давайте получим номер последней строки последовательности, как показано ниже. Взгляните на этои это:
$ lastLine=`seq 20|sed -n '$='`
$ echo $lastLine
20
Шаг 2: давайте установим количество строк (в конце последовательности), которые мы собираемся редактировать:
$ numberOfLines=7
$ echo $numberOfLines
7
Шаг 3: давайте рассчитаем начальную линию на основе предыдущих переменных, как показано ниже. Взгляните на это:
$ startLine=`expr $lastLine - $numberOfLines + 1`
$ echo $startLine
14
Шаг 4: Теперь мы можем заменить последние 7 строк последовательности чем-то другим, например следующим. Взгляните на это:
$ seq 20|sed -e "$startLine,+$numberOfLines{s/[12]/WoW/}"
1
2
3
4
5
6
7
8
9
10
11
12
13
WoW4
WoW5
WoW6
WoW7
WoW8
WoW9
WoW0
Шаг 4 использует раздел 4.4 справочной страницы sed, в котором говорится:
'ADDR1,+N'
Matches ADDR1 and the N lines following ADDR1.
Шаг 4 также использует двойные кавычки, как указано здесь.
Ну, 4 шага не нужны, если мы используем ответ Гохувот так:
$ seq 20 |tac|sed -e '1,7{s/[12]/WoW/}'|tac
1
2
3
4
5
6
7
8
9
10
11
12
13
WoW4
WoW5
WoW6
WoW7
WoW8
WoW9
WoW0