Я пытаюсь написать функцию Баш, что бы избежать всех двойных кавычек в одинарные кавычки, например:BASH избежать двойные кавычки в одинарные кавычки
'I need to escape "these" quotes with backslashes'
станет
'I need to escape \"these\" quotes with backslashes'
Мои взять на себя это было:
- найти пары одинарных кавычек в входе и извлечь их с Grep
- трубы в СЭД, избежать двойные кавычки
- Sed снова весь вход и заменить матч Grep с sedded матча
мне удалось получить его работу в части наличия правильно кавычки экранированы раздел, но заменить его в весь вход не работает.
Код сценария CopyPaste:
# $1 - Full name, $2 - minified name
adjust_quotes()
{
SINGLE_QUOTES=`grep -Eo "'.*'" $2`
ESCAPED_QUOTES=`echo $SINGLE_QUOTES | sed 's|"|\\\\"|g'`
sed -r "s|'.*'|$ESCAPED_QUOTES|g" "$2" > "$2.escaped"
mv "$2.escaped" $2
echo "Quotes escaped within single quotes on $2"
}
Случайные дополнительные вопросы:
- В консоли, спасаясь котировку только две обратные косые черты работает, но когда код введен в сценарии - мне нужно 4. Мне бы хотелось знать
- Мог ли я изменить этот код в цикле, чтобы избежать все пары одиночных кавычек, один за другим до EOF?
Спасибо!
P.S. Я знаю, что это, вероятно, будет легче сделать, например. python, но мне действительно нужно сохранить его в bash.
Возможно, лучший вопрос, почему вам нужно избегать кавычек в первую очередь? – chepner
Я не уверен, что ваши критерии для «держать его в bash», так как вы, похоже, в порядке с 'sed' и' grep'. Является 'awk' ок? Как насчет 'perl'? – rici
@chepner - нет, это не так. Если бы это было так, я бы попросил об этом. –