2014-01-03 2 views
0

У меня есть некоторые XML-файлы в каталоге, и я пытаюсь заменить текст <value>hello</hello> с текстом <value>helloWorld</value> использованием ниже сценария:Использование переменных в поиске и замене в Unix

#!/bin/bash 

VAR1=hello 
VAR2=helloWorld 

find ./myFolder/ -type f -exec sed -i 's/<value>$VAR1<\/value>/<value>$VAR2<\/value>/g' '{}' \; 

Если я сразу поместить значения вместо используя переменные VAR1 и VAR2, команда отлично работает и правильно заменяет текст.

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

+4

Это __FAQ__: Используйте __double quotes__. – devnull

ответ

5

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

find ./myFolder/ -type f -exec sed -i "s?<value>$VAR1</value>?<value>$VAR2</value>?g" '{}' \; 

В противном случае $VAR1 будут приняты буквально как «$ var1» вместо «привет», и то же самое для $VAR2 также.

Я также изменил разделитель в команде sed от s/// до s???, чтобы сделать его более читаемым при работе с тэгами html.

1

Убедитесь, что двойные кавычки sed command, чтобы скорлупа расширить переменные:

find ./myFolder/ -type f -exec sed -i "s/<value>$VAR1<\/value>/<value>$VAR2<\/value>/g" '{}' \; 
+0

Спасибо Anubhava, так что обязательно использовать двойные кавычки, когда мы используем такие переменные в UNIX? или это применимо только с командой 'sed'? – Chaitanya

+1

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

+1

Использовать двойные кавычки по умолчанию в оболочке. Есть случаи, когда вы не должны использовать кавычки вообще, но это необычно, и вы должны точно знать, чего вы пытаетесь достичь, когда вы это делаете. –

2

Вы должны использовать двойные кавычки вокруг SED заменить строку.

Кроме того, VAR2 не имеет $ спереди.

find ./myFolder/ -type f -exec sed -i "s/<value>$VAR1<\/value>/<value>VAR2<\/value>/g" '{}' \; 
+0

Спасибо, спасибо, я обновил свой запрос, чтобы включить отсутствующие $ – Chaitanya

Смежные вопросы