То, что я пытаюсь сделать, это: есть файл, внутри него есть строка (она обязательно будет там, 100%) в этой модели:
name_of_the_value=xxx
Где значение числовые и неизвестны мной, потому что они меняются между устройством и устройством ... Мне нужно каким-то образом получить значение xxx
и заменить его другим значением, данным пользователем через TextField
(Я использую Java для этого, это для приложения Android, но это все равно чистый сценарий оболочки).
Действителен:
name_of_the_value=xxx
и замените ее на name_of_the_value=user_value
xxx
(значение) часть Но как я могу использовать echo
, sed
или awk
, если я не знаю значение?
Принятие части для 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
inkscape
:-), – sudodus 21 October 2017 в 22:49