https://github.com/grieferatwork/sreplace
StringREPLACE
https://github.com/grieferatwork/sreplace
command-line-tool command-line-utility find regex regex-match replace replace-text
Last synced: 8 months ago
JSON representation
StringREPLACE
- Host: GitHub
- URL: https://github.com/grieferatwork/sreplace
- Owner: GrieferAtWork
- License: other
- Created: 2022-04-19T20:01:32.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-04-21T10:14:25.000Z (almost 4 years ago)
- Last Synced: 2025-04-11T03:59:01.292Z (12 months ago)
- Topics: command-line-tool, command-line-utility, find, regex, regex-match, replace, replace-text
- Language: C
- Homepage:
- Size: 59.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# sreplace
StringREPLACE: a simple commandline utility for mass finding+replacing strings/words in text files.
### Building
sreplace can be built for both windows and unix system.
- Windows: Open `sreplace.sln` with Visual Studio and press `CTRL+SHIFT+B`
- Unix/GCC:
```sh
gcc -o sreplace main.c
```
Known working target systems: `windows`, `cygwin`, `linux`, `KOS`
### Usage
The general idea behind `sreplace` is to specify FIND+REPLACE pairs, as well as a list of files/directories to search for FIND patterns that are then replaced. To prevent ambiguity, you should always invoke the utility as `sreplace -ibet -- FIND1 REPLACE1 FIND2 REPLACE2 -- file.txt`.
Flags:
- `-f`, `--find`: Instead of FIND+REPLACE pairs, all commandline strings are FIND, and rather than replace anything, print all matching locations as `file:line:col:nchars:pattern\n`
- `-i`, `--icase`: Ignore casing
- `-b`, `--bound`: Only match whole word (independently of`--regex`)
- `-r`, `--regex`: `FIND` patterns are regular expressions
- NOTE: Currently only available on UNIX.
- `-e`, `--escape`: `FIND` and `REPLACE` undergo C-style control character expansion before being used
- `-t`, `--keep-mtime`: Preserve last-modified timestamps of modified files
- `-R`, `--recursive`: Accept directories in the list of files. Directories will be enumerated recursively, and all contained files are treated as if they were listed explicitly (but see `--ext=LIST`).
- `--ext=LIST`: Only scan files with extensions apart of `LIST` when they are encountered as the result of scanning a directory due to `-R` (example: `--ext=.txt:.c:.h` -- only find+replace `.txt`, `.c` and `.h` files)
- `-n N`, `--max=N`: Stop after N matches
### Examples
Here are some examples:
- Replace data in streams
```sh
$ echo Hello Wrold | sreplace -- Wrold World
Hello World
```
- Inplace-modify files
```sh
$ echo foo bar foobar > file
$ sreplace -b -- bar baz -- file
$ cat file
foo baz foobar
```
- Find occurances
```sh
$ echo foo bar foobar > file
$ echo bar foo foobar >> file
$ sreplace -fb -- foo bar -- file
file:1:1:3:foo
file:1:5:3:bar
file:2:1:3:bar
file:2:5:3:foo
```
- Replace non-printable characters (including `\0` NUL)
```sh
$ echo -e 'a\0b\0c\0d\0e' | sreplace -e -- '\0' '_'
a_b_c_d_e
```
- Count occurances
```sh
$ sreplace -fb -- opt_progname -- main.c | wc -l
4
```