## Doing math

You can do math operations with the found match `\0`

or with the subexpressions (`\1`

, `\2`

, etc.) For example:

Search for | Replace to | Explanation |

`202[0-9]` |
`\(\0+1)` |
Increment the found year by one (`2023` will be changed to `2024` ) |

String values are implicitly converted to numbers. A string used in math operations must be numeric, otherwise Aba shows an error message. For example, `"5N" + 1`

won't work.

### Counters

The following counters are supported:

`Aba.fileNo()`

is the sequential**file number**(1 in the first file, 2 in the second file, etc.);`Aba.matchNo()`

is the sequential**match number**(counting across all files, like NR in AWK);`Aba.matchNoInFile()`

is the sequential**match number in the current file**(like FNR in AWK).

All counters start from 1, but you can add some math operations to start counting from any other number or count even/odd numbers only. Examples:

Search for | Replace to | Explanation |

`^` |
`\{Aba.matchNoInFile() " "}` |
Add a line number to each line |

`^\N?` |
`\(if \0 {Aba.matchNoInFile() " " \0} else {\0})` |
Add line numbers to non-empty lines only |

`<img ` |
`<img id="x\{Aba.matchNo() - 1}" ` |
Add an unique id starting from zero to each <img> tag |

`<img ` |
`<img id="x\{Aba.matchNo() * 2 - 1}" ` |
Same, start from one and use odd numbers only (1, 3, 5, etc.) |

### Number literals

You can use double-precision floating-point numbers like `3.14159_26535`

, `6.02214076e23`

, or `1.380649e-23`

.

This includes **integer numbers** from -9007199254740991 to 9007199254740991 (2⁵³ − 1), which is enough to represent the whole 32-bit integer range, but not enough for 64-bit integers. If an integer value is outside of this range, Aba shows an error message. You can operate with the larger numbers, but the operations will be inexact and you need to write them in the format with mantissa and exponent: `9.00719925474100e15`

.

An underscore can be used anywhere between two digits, for example, to **separate thousands:**` 9_007_199_254_740_991`

.

An uppercase or lowercase letter E is used for the exponent: `6.02214076E23`

or `6.02214076e+023`

are the same and mean 6.02214076 × 10²³.

### Math operations

Aba supports the four basic arithmetic operations: `+ - / *`

. Double-precision floating-point arithmetic is used internally, so the result is inexact just like in other programming languages.

The `//`

operator is **an integer division,**`%`

is **a floating-point remainder (modulo operator).** Note that Aba rounds towards zero (truncates the result) similarly to dividing integer numbers in C, JavaScript, or Java, while Python rounds towards negative infinity (does a floor division). Same for the remainder operation: Aba's implementation is the same as the fmod function in C or the `%`

operator in JavaScript and Java. For negative numbers, the result is different from Python; for positive numbers, it's the same.

Search for | Replace to | Explanation |

`anything` |
`\(-7 // 2)` |
Truncating division; the result (the quotient) is −3 |

`anything` |
`\(-7 % 2)` |
The remainder is −1, so that quotient × divisor + remainder = dividend = −3 × 2 - 1 = −7 |

`anything` |
`\(3.5 // 2)` |
The quotient is 1 |

`anything` |
`\(3.5 % 2)` |
The remainder is 1.5, so that 2 × 1 + 1.5 = 3.5 |

Division by zero shows an error message.

This is a page from Aba Search and Replace help file.

- Welcome to Aba
- Getting started
- How-to guides
- Selecting the files to search in
- Inserting some text at the beginning of each file
- Replacing multiple lines of text
- Searching in Unicode files
- Replacing in binary files
- Performing operations with the found files
- Undoing a replacement
- Saving search parameters for further use
- Removing private data
- Adding or removing Aba from Explorer context menu
- Integrating Aba with Total Commander
- Integrating Aba with Free Commander
- Integrating Aba with Directory Opus

- Regular Expressions
- Replacement syntax
- User interface
- Command line
- Troubleshooting
- Glossary
- Version history
- Credits