Intereting Posts
Настройка цветов для строки состояния mutt при настройке нескольких учетных записей Как проверить, что изменяется содержимое файла, а не atime, mtime, ctime в Linux? Есть ли разница в использовании ресурсов / потребностях между версиями Ubuntu и Debian Linux Mint (под тем же DE)? Почему debian unstable предпочитает устанавливать cgmanager? Файлы SCP без взаимодействия с пользователем USB-аудио-адаптер вызывает HTML5-видео в Firefox для быстрой перемотки вперед после замены материнской платы Debian получает пустой экран во время загрузки Как получить CentOS 6.5 gui? Какой сервер tftp запущен Использование веб-браузера для создания галереи / слайд-шоу из локальных файлов SiS 771/671 графическая карта: Есть ли какой-то Unix-подобный дистрибутив ОС, который работает с ним правильно? Ключ для завершения работы ОС Solaris / etc / sudoers – Оскорбления – Как добавить список оскорблений? Создать ссылку между двумя существующими файлами Запустить сценарий оболочки при установке нового тома

Добавить в сценарий оболочки

У меня есть файл test.txt, который имеет строку, как показано ниже

values = abc, def, dfg, ert, sdf, sfd, sdf 

Я использую сценарий оболочки для добавления нового значения с разделением запятыми в значениях в тесте, txt.

Например, мне нужно добавить «ghf» в test.txt:

 values = abc, def, dfg, ert, sdf, sfd, sdf, ghf 

Также мне нужно удалить значение.

Например, если мне нужно удалить «ert» в test.txt:

 values = abc, def, dfg, sdf, sfd, sdf, ghf 

Как я могу добиться этого в сценарии оболочки?

(то есть)

Если я дам

 echo "abc" >> test.txt 

Он может добавить «abc» в конец файла, но мне нужно добавить в поле «values ​​=» в test.txt

Спасибо,
Хари

    Быстрое решение без защиты от угловых случаев.
    (Спасибо Гленн Джекман за оптимизацию sed .)

    Добавление

    sed -i "/^values = / s/$/, ${NEW_VALUE}/" test.txt

    объяснение

    sed -i – внести изменения в данный файл, не печатать на стандартный stdout .

    /^values = / – Когда sed расположен на строке, которая начинается со values = .

    s/$/, ${NEW_VALUE}/ – Добавить , ${NEW_VALUE} в конце строки.

    test.txt – файл, над которым sed будет выполнять действия.

    Удаление

    sed -i "/^values = / s/ ${REMOVE_VALUE},\?//" test.txt

    объяснение

    s/ ${REMOVE_VALUE},\?// – Удалить первое вхождение ${REMOVE_VALUE} вместе с необязательным последующим ${REMOVE_VALUE}

    Проблемы с этим решением

    1. Добавление первого значения добавит сразу после values =
    2. Удаление последнего значения оставит строку, заканчивающуюся на.
    3. Если добавленные / удаленные переменные содержат разделитель sed для команды s (в моем примере это / ), команда не будет работать.

    Используя ed вы можете сделать следующее:

     ed -s test.txt <<<$'/values/s/$/,ghf\nw' # add ghf to the end of line 

    а также

     ed -s values <<<$'/values/s/ert,//\nw' # remove ert