Как я могу получить и изменить значение строки внутри файла, если значение такой строки мне неизвестно?

То, что я пытаюсь сделать, это: есть файл, внутри него есть строка (она обязательно будет там, 100%) в этой модели:

name_of_the_value=xxx

Где значение числовые и неизвестны мной, потому что они меняются между устройством и устройством ... Мне нужно каким-то образом получить значение xxx и заменить его другим значением, данным пользователем через TextField (Я использую Java для этого, это для приложения Android, но это все равно чистый сценарий оболочки).

Действителен:

  1. Найдите и удалите всю строку и замените ее на полную, например, удалите name_of_the_value=xxx и замените ее на name_of_the_value=user_value
  2. Замените только xxx (значение) часть
  3. Прокомментируйте '#' любые существующие совпадающие строки и напишите полную строку внизу файла

Но как я могу использовать echo, sed или awk, если я не знаю значение?

0
задан 9 May 2016 в 19:10

1 ответ

Принятие части для user_value является всегда 3 символами долго, можно сделать это как это:

sed "s/name_of_the_value=.{0,3}/name_of_the_value=$new_value/"

Или если Вы быть уверенным нет ничего позади в той строке, Вы также могли бы использовать:

sed "s/name_of_the_value=.*/name_of_the_value=$new_value/"

я надеюсь, что получил это право REGEX, я не про в этом. Таким образом, значение должно быть все время 3 символами долго лучше всего в шестнадцатеричном формате, потому что десятичное число не является всегда 3 символами долго в случаях ниже 100. Второй случай должен работать даже я, число ниже 100, но это принимает целое name_of_the_value=user_value, часть находится в собственной строке. Теперь тестируя это в терминале вывод похож на это для второго случая:

video@NAUTH:~$ echo "name_of_the_value=xxx" | sed "s/name_of_the_value=.*/name_of_the_value=$USER/"
name_of_the_value=video

, Конечно, необходимо передать вывод по каналу назад в файл или использовать временный файл для свопинга вокруг. Вы могли использовать:

sed "s/name_of_the_value=.*/name_of_the_value=$new_value/" /input_file | sponge /input_file

Sed только изменяет вывод, читая файл, пишущий это, губка сохраняет вывод затем, пока Вы не через, и записывает изменения обратно.

, Если Вы не хотите или не можете использовать запись губки во втором файле и затем переключить их как эта цепочка команд.

sed "s/name_of_the_value=.*/name_of_the_value=$new_value/" /input_file > /output_file
rm -v /input_file
mv -v /output_file /input_file

Как @kos указанный в комментарии можно также использовать -i флаг эти sed команда для обратной записи во входной файл без использования временного файла или sponge:

sed -i "s/name_of_the_value=.*/name_of_the_value=$new_value/" /input_file
3
ответ дан 10 May 2016 в 05:10
  • 1
    @douaksofiane, I' m довольный Вы нашли путь к установить inkscape:-), – sudodus 21 October 2017 в 22:49

Другие вопросы по тегам:

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