Замена * определенного * термина в файле XML - PullRequest
1 голос
/ 27 октября 2010

Я хочу заменить текст PATHTOEXPORT содержимым переменной, переданной в командной строке, в которой будет указан путь к папке (например, /Dev_Content/AIX/Apache)

Я наткнулся на эту статью , в которой рассказывается, как использовать sed для замены значения в XML-файле другим.

Однако, прежде чем я не использовал sed, я не уверен, как читать указания.

Сценарий выглядит следующим образом:

# Check that exactly 3 values were passed in
if [ $# -ne 3 ]; then
echo 1>&2 “This script replaces xml element’s value with the one provided as a command parameter \n\n\tUsage: $0 <xml filename> <element name> <new value>”
exit 127
fi

echo "DEBUG: Starting... [Ok]\n"
echo "DEBUG: searching $1 for tagname <$2> and replacing its value with '$3'"

# Creating a temporary file for sed to write the changes to
temp_file="repl.temp"

# Elegance is the key -> adding an empty last line for Mr. “sed” to pick up
echo ” ” >> $1

# Extracting the value from the <$2> element
el_value=`grep “<$2>.*<.$2>” $1 | sed -e “s/^.*<$2/<$2/” | cut -f2 -d”>”| cut -f1 -d”<”`

echo "DEBUG: Found the current value for the element <$2> - '$el_value'"

# Replacing elemen’s value with $3
sed -e “s/<$2>$el_value<\/$2>/<$2>$3<\/$2>/g” $1 > $temp_file

# Writing our changes back to the original file ($1)
chmod 666 $1
mv $temp_file $1

Есть ли лучший способ сделать то, что мне нужно? Могу ли я сделать это in situ вместо использования промежуточного файла?

1 Ответ

1 голос
/ 27 октября 2010

Вы можете редактировать sed на месте.Есть два варианта: сделать sed для вас временный файл (самый безопасный) или действительно отредактировать его на месте (опасно, если ваша команда не проверена).*

sed -i '' -e 's|PATHTOEXPORT|/Dev_Content/AIX/Apache|' file.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...