У меня проблема с использованием команды sed
. Я пытаюсь написать скрипт bash, который выполняет следующее:
:@
:@
и заменяет ее с новой строкой , как показано ниже:
#! /bin/bash
echo "Please enter the ip address of you file"
read ipnumber
find=`grep ':@' application.properties` # find the line
input="connection.url=jdbc\racle\:thin\:@$ipnumber\:1521\:billz" # preparing new line
echo `sed "s/'${find}'/'${input}'/g" application.properties` # replace old with new line
Проблема в том, что ничего не происходит.
Я уже пытался использовать "${find}"
вместо '${find}'
Моя проблема была: я использовал имя переменной (значение), которая зарезервирована :))
Решение:
#!/bin/bash
read -p "Please Enter The ip address : " ipnum
find=`grep ":@" application.properties`
test="connection.url=jdbc:oracle:thin:@$ipnum:1521:e"
sed -i "s/"$find"/"$test"/g" application.properties
СПАСИБО гейра
<ч>Есть несколько проблем с этим фрагментом. Я рекомендую вам немного лучше изучить синтаксис bash, прежде чем писать в нем скрипты.
В любом случае, если вы хотите редактировать файл, вам нужен редактор файлов. sed не является файловым редактором. Я верю, что это будет делать то, что вы хотите.
#!/bin/bash
read -p "Enter the ip address: " ipnumber
ed -s application.properties << EOF
/:@/c
connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz
.
w
EOF
То, что говорит этот сценарий ed: /:@/c
- в первой строке, содержащей :@
, c , изменить строку со всем следующим до строки, содержащей только .
. Затем w
- w запишите изменения в файл.
См. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed для помощи по редактированию с использованием ed и http: // mywiki. wooledge.org/BashGuide для изучения bash.
Обновление:
sed можно использовать для достижения того же, но он не может редактировать файлы, он может использоваться только для создания нового файла.
# POSIX
sed "/:@/c\
connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz" application.properties
Здесь sed выведет файл с примененными изменениями. Вы можете перенаправить на новый файл, а затем переместить этот файл поверх старого. GNU sed также имеет нестандартную опцию -i
, которая делает последнюю часть прозрачной. GNU sed также не требует наличия новой строки в сценарии sed.
# GNU sed
sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz" application.properties
Обратите внимание, что ed заменит только первую первую строку , которая соответствует регулярному выражению, в то время как sed заменит все строки, соответствующие этому регулярному выражению.