Нужна помощь, чтобы заменить строки, соответствующие имени ключа в linux

Возможно, проблема связана с доступом к папке /dev/xconsole. Попробуйте использовать chmod, чтобы изменить разрешение и перезапустить его. Это может сработать.

0
12.05.2020, 21:35
1 ответ

Не совсем уверен, что вы хотите заархивировать. Предположим, вы хотите исправить файл file.txt, содержащий текст и ваши пары значений ключа, подобные этому

key1
key2
text
key1 = "original"
key2 = ['o', 'r', 'i', 'g']
text

с patchfile.txt, содержащим только пары значений ключа значений, которые вы хотите заменить, например

key1 = "patched"
key2 = ['p', 'a', 't', 'c', 'h']

без перезаписи текста key1/ key2, который не является парой ключ-значение, чтобы получить file.txtподобное этому

key1
key2
text
key1 = "patched"
key2 = ['p', 'a', 't', 'c', 'h']
text

, введя такую ​​команду

patchmystuff.sh file.txt patchfile.txt

Содержание patchmystuff.shможет выглядеть так:

#!/usr/bin/env bash

original_file=$1
patch_file=$2

# loop from here:
# https://stackoverflow.com/questions/1521462/looping-through-the-content-of-a-file-in-bash
while IFS="" read -r line || [ -n "$line" ]
do
    printf 'patching %s\n' "$line"
    # (?<==) is the lookbehind for = to keep it
    # otherwise it will match key1/key2 in regular text
    search_string=$(echo "$line" | perl -ne 's/(?<==).*//g; print;')
    printf 'search string: "%s"\n' "$search_string"
    sed -i -e "s/$search_string.*/$line/g" "$original_file"
done < "$patch_file"
0
28.04.2021, 23:15

Теги

Похожие вопросы