Как заменить набор строк в файле с другим набором строк в Unix? - PullRequest
0 голосов
/ 29 апреля 2010

как заменить набор строк в файле другим набором строк в unix?

#!/usr/bin/ksh
export text1='log_file=$LOG_PATH${UNISON_JOB}".log"'
export text2='\. \$\{env_path\}set_test_log_file\.ksh'
export text3='log_file\=\$LOG_PATH\$\{UNISON_JOB\}\"\.log\"'

echo $text1
echo $text2
echo $text3

for file in `grep -il ${text1} SANDEEP`
do
sed 's/${text3}/${text2}/g' $file > /$file.tmp
mv /$file.tmp $file
echo $file
done

Я попробовал приведенный выше код, но он не работает. это kshell .here sandeep - имя файла, который я ищу.

Ответы [ 2 ]

0 голосов
/ 27 марта 2013

Для sed с кавычкой мне нравится записывать целую команду в файл, а затем выполнить этот файл: как то так:

echo "s/${text1}/${text2}/g" > a.sed
sed -f a.sed < inputFile > tmp && mv tmp inputFile
rm -f a.sed

, что избавит вас от многих неприятностей, связанных с этими цитатами.

0 голосов
/ 12 апреля 2012

Причина, по которой это не работает, заключается в том, что вы используете одиночные qoutes для команды sed.

Команда sed пытается заменить литерал текст ${text3} на ${text2}. То, что вы хотите, это заменить значение на $text3 значением $text2.

Чтобы использовать переменные в выражении sed, вам нужно использовать двойные кавычки.

Еще один совет: если вам не нужен временный файл, вы также можете использовать опцию sed -i для редактирования файла на месте.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...