Похоже, вы пытаетесь использовать обозначение диапазона sed
, т.е. / start /, / end / ?.Это правильно?
Если это так, все, что вам нужно сделать, это добавить дополнительные символы '/', которые отсутствуют, т.е.
sed -n "/$VARIABLE/,/test/p" aFile
Диапазон может состоять из номеров строк, строк /регулярные выражения и / или относительные номера строк (без оглядки назад).
sed -n "1,20p" aFile
# prints lines 1-20
sed -n '/start/,/end/p' aFile
# prints any text (include current line)
# with start until it finds the word end
sed -n '/start/,+2p' aFile
# prints line matching start and 2 more lines after it
Я использую строки в шаблоне /regex/
, чтобы упростить объяснение.Вы можете делать настоящие рекс-экс как /^[A-Za-z_][A-Za-z0-9_]*/
и т. Д., Когда вы узнаете о них.
Также за ваш комментарий о '$', sed также будет использовать '$' в качестве индикатора 'end-of-line 'ЕСЛИ символ виден в reg-ex, который оценивается.Также обратите внимание, как некоторые из моих примеров используют dbl-кавычки ИЛИ одинарные кавычки.Одинарные кавычки означают, что ваше выражение sed -n '/$VARIABLE/,/test/p' aFile
будет соответствовать буквенным символам AND, так как $ не находится в конце регулярного выражения, оно будет использоваться как обычный символ.'$' Применяется только как конец строки, когда он находится в конце reg-ex (part);например, вы могли бы сделать /start$|start2$/
, и оба из них означали бы конец строки.
Как уже отмечали другие, ваше использование
sed -n "/$VARIABLE/,/test/p" aFile
конвертируется через оболочкупеременное выражение в
sed -n "/some text/,/test/p" aFile
ТАК, если вы хотите, чтобы ваш текст был закреплен в конце строки, вы можете написать
sed -n "/$VARIABLE$/,/test/p" aFile
, который расширяется до
sed -n "/some text$/,/test/p" aFile
Надеюсь, это поможет