EOL означает, что дистрибутив больше не получает никаких обновлений. Файлы на archive.debian.org не исчезнут в ближайшее время — большинство исторических выпусков Debian все еще доступны там ; подробности см. в файле README .
Мне неизвестно какое-либо конкретное «официальное» заявление на этот счет, но, насколько мне известно, дистрибутивы, перемещенные в архив, никогда не удаляются, и предполагается, что архив живет как минимум до тех пор, пока Debian проект.
Необходимо заменить двойные кавычки, как обсуждалось, но если файл содержит более одного шаблона, исходный сценарий также не работает. Приведенное выше решение работает хорошо, просто печатайте каждую строку между начальными и конечными шаблонами. Этот лайнер печатает только первое вхождение:
sed -n '/pattern1/{:loop;p;/pattern2/q;N;s/.*\n//;b loop};' "$file"
Основная проблема с вашим кодом заключается в том, что вы ожидаете, что оболочка расширит ваши START
и END
переменные в одной строке -в кавычках. Оболочка никогда бы этого не сделала, и это одно из основных различий между строками в одинарных и двойных -кавычках.
Вместо этого используйте строку в двойных -кавычках для выражения sed
.
Однако,вы также, кажется, ожидаете, что ваши два конвейера grep
вернут ровно один номер строки каждый, и в этом случае я не вижу причин для них, поскольку вы могли бы сделать эту форму sed
напрямую. Команды в sed
принимают адреса в виде номеров строк, регулярных выражений или их комбинаций, если команда принимает более одного адреса.
sed -n '/pattern1/,/pattern2/ p' "$FILE" >temp
или
sed '/pattern1/,/pattern2/ !d' "$FILE" >temp
Вам, вероятно, не следует сохранять свои конвейеры grep
, но это нужно для того, чтобы добавить, что вы можете сократить их до чего-то, возвращающего номер строки из sed
напрямую.
start=$( sed -n '/pattern1/ { =; q; }' )
Приведенное выше даст вам номер первой строки, соответствующей шаблону pattern1
. Это команда =
, которая выводит номер текущей строки.