вставьте несколько строк в скрипт с помощью sed

Проблема с iOS 10.3.2

Подключение устройства с iOS 10.2 работает нормально

0
28.07.2019, 13:40
3 ответа

Вам не нужны подстановки команд для установки ваших переменных:

var1="database1="
var2="database2="
var3="database3="

Я думаю, вам нужны одинарные кавычки для добавления новой строки, но это выглядит довольно уродливо, если вы заключаете свои переменные в двойные кавычки.Двойные кавычки необходимы, если ваши переменные содержат символы пробела:

sed -i '/#variables/i\
'"$var1"'\
'"$var2"'\
'"$var3" /data1/create_database

С помощью GNU sed вы можете просто добавить несколько новых строк:

sed -i "/#variables/i$var1\n$var2\n$var3" /data1/create_database
1
28.01.2020, 02:22

Вы можете использовать управляющую последовательность(\n)для вставки новой строки. Обратите внимание, что

sed -i "/#variables/i \
$var1\n$var2\n$var3" /data1/create_database

эквивалентно

sed -i "/#variables/i $var1\n$var2\n$var3" /data1/create_database

поэтому вам понадобится двойная обратная косая черта

sed -i "/#variables/i\\
$var1\n$var2\n$var3" /data1/create_database

Возможно также рассмотреть несколько выражений, чтобы сделать команду одной строкой, где каждое выражение фактически является строкой.

sed -i -e '/#variables/i\' -e "$var1\n$var2\n$var3" /data1/create_database

И, наконец, вам может понадобиться экранировать ваши переменные

var1=$(echo "database1=" | sed 's/[]\/$*.^&[]/\\&/g')
var2=$(echo "database2=" | sed 's/[]\/$*.^&[]/\\&/g')
var3=$(echo "database3=" | sed 's/[]\/$*.^&[]/\\&/g')

sed -i -e '/#variables/i\' -e "$var1\n$var2\n$var3" /data1/create_database
1
28.01.2020, 02:22

Вам нужно удвоить количество обратных косых черт, так как вы работаете в двойных кавычках:

sed -i "/#variables/i \\
$var1\\
$var2\\
$var3" /data1/create_database

И если у вас есть дела поважнее, чем считать эти чертовы обратные косые черты, вы можете позволить sedпозаботиться о деталях за вас, но это будет стоить вам кода:

sed -i "/#variables/{H;s/.*//;x;}
s/\\n/$var1&$var2&$var3&/
" /data1/create_database

Или это, где не упоминается новая строка:

sed -i "/#variables/{
           h
           s/.*/$var1/p
           s/.*/$var2/p
           s/.*/$var3/p
           g
}" /data1/create_database

Конечно, при размещении переменных оболочки внутри sed необходимо соблюдать осторожность. код. Их нужно сначала стерилизовать, а потом использовать. Например, что, если в вашей оболочке есть косая черта '/'?

1
28.01.2020, 02:22

Теги

Похожие вопросы