Проблема с Sed в скрипте Bash

У меня проблема с использованием команды sed. Я пытаюсь написать скрипт bash, который выполняет следующее:

  1. ищет строку, содержащую :@
  2. , затем сохраняет строку, содержащую :@ и заменяет ее с новой строкой

, как показано ниже:

#! /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}'

2
задан 3 March 2011 в 19:09

2 ответа

Моя проблема была: я использовал имя переменной (значение), которая зарезервирована :))
Решение:

#!/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

СПАСИБО гейра

<ч>
0
ответ дан 3 March 2011 в 19:09

Есть несколько проблем с этим фрагментом. Я рекомендую вам немного лучше изучить синтаксис 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 заменит все строки, соответствующие этому регулярному выражению.

0
ответ дан 3 March 2011 в 19:09

Другие вопросы по тегам:

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