Расширение переменной в строке с кавычками - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь добавить строку сразу после определенной строки

echo $'oSAMPLEINSERT\E:x\n' |vi +/"$search_string" config.txt 

Могу ли я использовать переменную (например, $ SampleIns) вместо жесткого кодирования строки "SAMPLEINSERT".Может кто-нибудь помочь, пожалуйста

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

ed, вероятно, больше подходит для такой работы.Единственное предположение, что $searchstring не содержит неоткрытого /.

# Make sure the search value is quoted for ed.
# That means verifying that ORACLE_HOME is similarly
# escaped. E.g. ORACLE_HOME='\/usr\/foo\/bar'
searchstring="LoadModule rewrite_module \"${ORACLE_HOME}\/ohs\/modules\/mod_rewrite.so\""
ed config.txt <<EOF
/$searchstring/a
SAMPLEINSERT
.
w
EOF
0 голосов
/ 08 июня 2018

Вы можете изменить контексты цитирования в середине строки.(Ваш код фактически уже делает это: +/"$search_string" расширяет +/ части в контексте без кавычек и $search_string в контексте в двойных кавычках).

Поместите часть, содержащую переменную, в двойнуюкавычки и часть, которая нуждается в обработке экранирования обратной косой черты в стиле C внутри $'', следующим образом:

echo "o${SampleIns}"$'\E:x\n'

Если SampleIns содержит последовательности обратной косой черты, замените их литеральными значениями, на которые они ссылаются, используя printf %b заранее:

printf -v SampleInsLiteral '%b' "$SampleIns"
echo "o${SampleInsLiteral}"$'\E:x\n'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...