-E для совместимости с BSD. Это то же самое, что и -r или --regexp-extended — использовать в скрипте расширенные регулярные выражения. См. https://stackoverflow.com/a/3139925/3292582
Для применения изменений вы можете либо
sed Версия
поддерживает его (GNU sed
— по умолчанию в Linux — и BSD sed
— который также установлен в OSX — обе поддерживают) /.../
- это своего рода константа регулярного выражения, пытающаяся сопоставить строку "var"
, а не содержимое var
. Попробуйте
awk -v var=$val '$0 ~ var {getline; print}' file
или
awk -v var=$val 'match ($0, var) {getline; print}' file
Убедитесь, что переменная оболочки содержит двойные кавычки, так как они являются частью шаблона. Если это невозможно, попробуйте
awk -v var=$val 'match ($0, "\"" var "\"") {getline; print}' file