У меня есть два массива. Первый заполнен значениями grep
ed из файла, который я хочу заменить новыми загруженными.
Обратите внимание, что я точно не знаю, как будет выглядеть первый массив, то есть некоторые значения будут иметь _ , другие - , а некоторые не будут иметь ничего из этого, и сразу после имени будет помещено : (двоеточие).
Пример массивов:
массив1:
[account: 123 shoppingcart-1: 123 messages-core_1: 123 messages-dispatcher_core_1: 123 Notification-dispatcher-smschannel_core_1: 123]
массив2:
[account_custom_2: 124 shoppingcart_custom_2: 124 messages_custom_2: 124 messages-dispatcher_custom_2: 124 messages-dispatcher-smschannel_custom_2: 124]
Эти массивы являются Единственный пример, для замены более 50 значений.
Я сравниваю каждый элемент во втором массиве с каждым элементом в первом массиве, как показано ниже:
file_name="<path_to_file>/file.txt"
for i in "${!array1[@]}"
do
for j in "${!array2[@]}"
do
array_2_base="`echo ${array2[$j]} | awk -F_ '{print $1}'`"
if [[ "${array1[$i]}" == *"$array_2_base"* ]]
then
sed -i "s=${array1[$i]}=${array2[$j]}=g" $file_name
fi
done
done
Ей e Я подстроку только первой части для каждого элемента во втором массиве, чтобы я мог сравнить его с элементом в первом массиве.
например account_custom_2: 124 -> account или messages-dispatcher_custom_2: 124 -> диспетчер уведомлений .
Это работает хорошо, но я сталкиваюсь с проблемой, когда уведомление находится в Notification-Core_1: 123 и Notification-dispatcher_core_1: 123 и Notification-dispatcher-smschannel_core_1: 123 .
Можете ли вы дать совет, как это исправить или вы можете предложить другой подход к этому?