2015-05-28 2 views
2

У меня есть некоторые переменные:Как разобрать переменную на команду sed в оболочке?

$begin=10 
$end=20 

, как передать их sed команду.

sed -n '$begin,$endp' filename | grep word 
sed -n '10,20p' filename | grep word 
+0

Вы можете поместить логику grepping в sed: try 'sed -n '$ begin, $ end {/ word/p}" file' – Kent

+0

Возможный дубликат [переменных оболочки в sed-скрипте] (http: // stackoverflow. ком/вопросы/7006910/оболочка-переменные-в-SED-скрипт) – NeronLeVelu

ответ

2

Причина, по которой это не работает, заключается в том, что одинарные кавычки в коде оболочки предотвращают расширение переменной. Хороший способ заключается в использовании 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 /;", могут возникнуть неприятные вещи.

Смежные вопросы