У меня есть некоторые переменные:Как разобрать переменную на команду sed в оболочке?
$begin=10
$end=20
, как передать их sed
команду.
sed -n '$begin,$endp' filename | grep word
sed -n '10,20p' filename | grep word
У меня есть некоторые переменные:Как разобрать переменную на команду sed в оболочке?
$begin=10
$end=20
, как передать их sed
команду.
sed -n '$begin,$endp' filename | grep word
sed -n '10,20p' filename | grep word
Причина, по которой это не работает, заключается в том, что одинарные кавычки в коде оболочки предотвращают расширение переменной. Хороший способ заключается в использовании AWK:
awk -v begin="$begin" -v end="$end" 'NR == begin, NR == end' filename
Это возможно с СЭД, если использовать двойные кавычки (в которых расширенные переменные оболочки):
sed -n "$begin,$end p" filename
Однако это при условии кода потому что sed не может различать код и данные таким образом (в отличие от awk-кода выше). Если пользователю удастся установить, скажем, end="20 e rm -Rf /;"
, могут возникнуть неприятные вещи.
Вы можете поместить логику grepping в sed: try 'sed -n '$ begin, $ end {/ word/p}" file' – Kent
Возможный дубликат [переменных оболочки в sed-скрипте] (http: // stackoverflow. ком/вопросы/7006910/оболочка-переменные-в-SED-скрипт) – NeronLeVelu