Вы можете использовать стандартное подстановочное имя файла, например. для всех 3-значных чисел (по порядку):
$ mycommand dir-[0-9][0-9][0-9]/myfile
При базовой подстановке вам нужен один шаблон для однозначных чисел, один для двузначных чисел и т. д.
$ mycommand dir-[0-9]/myfile dir-[0-9][0-9]/myfile
Zsh (но не другие оболочки) также поддерживает mycommand dir-<->/myfile
или, например, mycommand dir-<3-42>/myfile
для каталогов с номерами от 3 до 42.
Или, если вы предпочитаете раскрытие фигурных скобок (и ваша оболочка поддерживает это):
$ mycommand dir-{1..3}/myfile
Если ваши имена каталогов содержат начальные нули, поместите их в фигурные скобки, например каталог-{001..048}/мой файл
.
С раскрытием фигурных скобок вы также можете сделать (в ksh93 и zsh, но не в bash)
$ mycommand dir-{1..$n}/myfile
где $n
расширяется до некоторого целого числа.
С sed
:
tac file | sed '3 s|<br />$|</font>|' | tac
С ed
:
echo -e '$-2s/<br \/>$/<\/font>/\nw' | ed -s file
С vim
:
:$-2 s!<br />$!</font>!
Поскольку это последнее вхождение в файл, вы можете использовать этот sed
скрипт:
sed -i 'H;1h;$!d;g;s_\(.*\)<br />_\1</font>_' yourfile.html
или упрощенный с помощью GNU sed
и расширенного регулярного выражения:
sed -izE 's_(.*)<br />_\1</font>_' yourfile.html
Хитрость заключается в том, чтобы обработать весь файл в одном буфере. Версия POSIX делает это путем сбора в буфере удержания, версия GNU использует для этого опцию -z
. Затем с помощью команды s
замените все (.*
), включая последнее вхождение шаблона, на все перед шаблоном (, \1
относится к части в()
)и замене.
Другая попытка, если вам действительно требуется замена только в третьей до последней строке (без замены, если нет совпадения, без замены в следующей -по -последней или последней строке):
sed '1N;N;$!{P;D];s_<br />_</font>_' yourfile.html