С помощью SO я смог исправить свою команду sed, чтобы я мог использовать переменные (использовал «вместо» и не использовал g для глобального).
Тем не менее, я изо всех сил пытаюсь заставить команду работать правильно.
Чтобы дать вам некоторый контекст, у меня есть файл, содержащий множество строк текста, и некоторые строки содержат один или несколько тегов. эти теги имеют следующий формат:
[#$key#] - i.e #[#] is used to indicate the presence of a key
Затем у меня есть объект внутреннего массива, в котором хранится строковое значение, содержащее каждый ключ и соответствующее значение в следующем формате:
$key=$value
То, что я пытаюсь сделать, это вывести мой файл, содержащий теги, одновременно с использованием глобальной замены sed для замены ключа $ на соответствующее значение в объекте массива.
У меня проблема в том, что моя команда grep/sed не заменяет текст, и я не могу понять, почему.
вот мой код:
for x in "${prop[@]}"
do
key=`echo "${x}" | cut -d '=' -f 1`
value=`echo "${x}" | cut -d '=' -f 2`
# global replace on the $MY_FILE
cat $MY_FILE | sed "s|\[#${key}#\]|${value}|g" > ${TEMP_MY_FILE}
cat $TEMP_MY_FILE > $MY_FILE
done
Я думал об использовании sed -i, но моя версия, похоже, не поддерживает-i
cat file | sed > new_file
. Вместо этого сделайтеsed ... file > new_file
. - person fedorqui 'SO stop harming'   schedule 20.01.2014key
иvalue
, что, я думаю, вызовет некоторые ошибки. - person chepner   schedule 20.01.2014set -x
в начале вашего скрипта и отлаживайте его таким образом - person Jakub Kotowski   schedule 20.01.2014sed -i ... inputfile
— это просто сокращение дляsed ... inputfile > tmpfile; mv tmpfile inputfile
. Это просто избавляет вас от необходимости указывать это явно... - person twalberg   schedule 20.01.2014