.github/workflows | ||
cmd/multini | ||
doc | ||
internal | ||
test | ||
.gitignore | ||
go.mod | ||
go.sum | ||
LICENSE | ||
Makefile | ||
README-ru.md | ||
README.md |
Multini
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)
- Install golang, git, make;
- Clone this repo:
git clone https://github.com/GenZmeY/multini
- Go to the source directory:
cd multini
- Build:
make
- 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.