Как прочитать файл свойств через мой скрипт?

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

#!/bin/bash file = "/tmp/countries.properties" while IFS='=' read -r key value do echo "${key} ${value}" sed -ie 's/:iso=>"${key}"/:iso=>"${key}",:alpha_iso=>"${value}"/g' /tmp/country.rb done < "$file" 

но когда я запускаю файл, я получаю сообщение об ошибке «Nno такой файл или каталог», несмотря на то, что мой файл существует (я сделал «ls» после проверки).

 localhost:myproject davea$ sh /tmp/script.sh =: cannot open `=' (No such file or directory) /tmp/countries.properties: ASCII text /tmp/script.sh: line 9: : No such file or directory localhost:myproject davea$ localhost:myproject davea$ ls /tmp/countries.properties /tmp/countries.properties 

Что еще мне нужно сделать, чтобы прочитать в моем файле свойств успешно?

  • Соедините каждую строку файла с определенной переменной во второй команде
  • Как извлечь строку между двумя шаблонами с помощью sed в Linux, а второй шаблон повторяет больше строк в файле
  • Как добавить новые строки из другого файла с помощью sed
  • условная окраска в grep
  • Извлечь абзац, разделенный на *** с помощью AWK
  • Как объединить все файлы в заданном каталоге по дате, где я хочу, чтобы самый новый файл был сверху?
  • Как выполнить операцию по отдельным матчам в полной строке
  • строковые манипуляции без awk или sed
  • 2 Solutions collect form web for “Как прочитать файл свойств через мой скрипт?”

    Ошибки находятся прямо там:

     =: cannot open `=' (No such file or directory) 

    Что-то пытается открыть файл с именем = , но его не существует.

     /tmp/script.sh: line 9: : No such file or directory 

    Обычно это имя файла перед последним двоеточием, но поскольку оно пустое, кажется, что-то пытается открыть файл с пустым именем.

    Рассмотрим линию:

     file = "/tmp/countries.properties" 

    Это запускает командный file с аргументами = и /tmp/countries.properties . (Оболочке все равно, какие аргументы для команды есть, может быть что-то, что использует знак равенства в качестве аргумента.) Теперь file просто так происходит, как программа, используемая для идентификации типов файлов , и это делает только то. Сначала /tmp/countries.properties открыть = , в результате /tmp/countries.properties ошибка, а затем /tmp/countries.properties , сообщив вам, что это такое:

     /tmp/countries.properties: ASCII text 

    Другой No such file or directory из < $file перенаправления < $file . Поскольку переменной не присвоено значение, перенаправление не будет работать.

    Назначение в оболочке требует, чтобы не было пробела вокруг знака = , поэтому:

     file=/tmp/countries.properties 

    Также здесь:

     sed -ie 's/:iso=>"${key}"/:iso=>"${key}",:alpha_iso=>"${value}"/g' 

    Переменные не расширяются в одинарных кавычках, и у вас есть все вокруг всего второго аргумента, поэтому sed получит литерал ${key} а не содержимое переменной.

    Либо завершите одиночные кавычки, чтобы развернуть переменные, либо просто используйте двойные кавычки для всей строки:

     sed -ie 's/:iso=>"'${key}'"/:iso=>"'${key}'",:alpha_iso=>"'${value}'"/g' sed -ie "s/:iso=>\"${key}\"/:iso=>\"${key}\",:alpha_iso=>\"${value}\"/g" 

    Пытаться:

     file="/tmp/countries.properties" 
    Interesting Posts

    Нет звука в видео HTML5 (Firefox / Chromium)

    Java SDK для NixOS для IntelliJ

    заставлять RPM распознавать зависимость, построенную из источника

    Пользовательская команда при нажатии кнопки питания на GNOME 3.20

    мост не пересылает пакеты centos

    Отключить композит без перезапуска X

    Как остановить доступ к telnet для определенного IP-адреса?

    bash syntax – команда обертывания внутри sudo :: tail logs до тех пор, пока строка не будет найдена с таймаутом с использованием Terraform

    Выполняет ли dd какую-либо проверку?

    Список в настоящее время работает cron tab и остановить его

    Как правильно воссоздать RAID1

    Как автоматически изменить ориентацию в зависимости от положения поворота дисплея?

    Как получить доступ к корневой файловой системе для запуска cryptsetup, чтобы разрешить доступ к корневой файловой системе?

    Как создать каталог от 1 до n?

    Разница между Intel-драйвером и графическим процессором

    Linux и Unix - лучшая ОС в мире.