Command line utility for manipulating ini files with duplicate key names.
Go to file
2020-12-22 19:38:20 +03:00
.github/workflows Create codeql-analysis.yml 2020-12-17 20:59:36 +03:00
cmd/multini fix docs and readme 2020-12-17 21:18:14 +03:00
doc fix docs and readme 2020-12-17 21:18:14 +03:00
internal change project structure 2020-11-03 10:47:19 +03:00
test refactor: improved line parser 2020-11-09 17:03:57 +03:00
.gitignore refactor: improved line parser 2020-11-09 17:03:57 +03:00
go.mod enable go modules 2020-11-03 11:19:37 +03:00
go.sum enable go modules 2020-11-03 11:19:37 +03:00
LICENSE Initial commit 2020-04-26 00:02:58 +03:00
Makefile fix: save the version when building manually 2020-12-11 15:57:24 +03:00
README-ru.md Update README-ru.md 2020-12-22 19:38:20 +03:00
README.md Update README.md 2020-12-22 19:33:09 +03:00

Multini

build tests CodeQL GitHub go.mod Go version GitHub GitHub release (latest by date)

English, Русский

Command line utility for manipulating ini files with duplicate key names.

A compiled version of multini is available on the release page.


Description

Some programs use ini file format with duplicate key names.
For example, these are games based on the unreal engine.
It might look like this (part of the Killing Floor 2 config):

[OnlineSubsystemSteamworks.KFWorkshopSteamworks]
ServerSubscribedWorkshopItems=2267561023
ServerSubscribedWorkshopItems=2085786712
ServerSubscribedWorkshopItems=2222630586
ServerSubscribedWorkshopItems=2146677560

Most implementations only support having one property with a given name in a section. If there are several of them, only the first (or last) key will be processed, which is not enough in this case. multini solves this problem.

note:

  • multini is case sensitive;
  • quotes around the value are not processed (they are part of the value for multini);
  • multi-line values are not supported.
    (but this may change in the future)

Build & Install (Manual)

  1. Install golang, git, make;
  2. Clone this repo: git clone https://github.com/GenZmeY/multini
  3. Go to the source directory: cd multini
  4. Build: make
  5. Install: make install

Usage

Usage: multini [OPTION]... ACTION ini_file [section] [key] [value]
Actions:
  -g, --get          Get values for a given combination of parameters.
  -s, --set          Set values for a given combination of parameters.
  -a, --add          Add values for a given combination of parameters.
  -d, --del          Delete the given combination of parameters.
  -c, --chk          Display parsing errors for the specified file.

Options:
  -e, --existing     For --set and --del, fail if item is missing.
  -r, --reverse      For --add, adds an item to the top of the section
  -i, --inplace      Lock and write files in place.
                     This is not atomic but has less restrictions
                     than the default replacement method.
  -o, --output FILE  Write output to FILE instead. '-' means stdout
  -u, --unix         Use LF as end of line
  -w, --windows      Use CRLF as end of line
  -q, --quiet        Suppress all normal output
  -h, --help         Write this help to stdout
      --version      Write version to stdout

Examples

output a global value not in a section:
multini --get ini_file '' key

output section:
multini --get ini_file section

output list of existing sections:
multini --get ini_file

output value:
multini --get ini_file section key

  • if there are several keys, a list of all values of this keys will be displayed

create/update a single key:
multini --set ini_file section key value

  • if there is no key, it will be added
  • if the key exists, the value will be updated
  • if the key exists and has several values, the key with the specified value will be set, the rest of the values will be deleted

add a key with specified value:
multini --add ini_file section key value

  • if there is no key, it will be added
  • if the key exists and does not have the specified value, the new value will be added
  • if the specified value repeats the existing one, no changes will be made

delete all keys with specified name:
multini --del ini_file section key

delete a key with specified name and value:
multini --del ini_file section key value

delete a section:
multini --del ini_file section

short options can be combined:
multini -gq ini_file section key value

  • check the existence of a key with a given value using the return code

License

Copyright © 2020 GenZmeY

The content of this repository is licensed under MIT License.