User Rating 0.0
Total Usage 0 times
Drop CSV file here or browse Max 50 MB. UTF-8 encoded. Supports .csv and .tsv
Is this tool helpful?

Your feedback helps us improve.

About

Bulk-editing a single column in a CSV file with a text editor risks corrupting adjacent fields, especially when values contain your delimiter or are wrapped in quotes per RFC 4180. This tool parses your CSV into a structured grid, isolates the target column by index or header name, and applies replacement rules - literal string swap, regex pattern substitution, or full-column overwrite with a static v. The parser handles quoted fields, escaped double-quotes (""), and embedded newlines correctly. Delimiter is auto-detected from comma, semicolon, tab, and pipe by frequency analysis of the first 5 rows.

Limitations: this tool operates entirely in-browser memory. Files exceeding 50 MB are rejected to prevent tab crashes. Encoding is assumed UTF-8. If your CSV uses a BOM or non-UTF-8 encoding, results may contain artifacts. Pro tip: always verify the preview table before downloading - column indices are 0-based, and an off-by-one error in column selection will silently corrupt the wrong field.

csv editor column replace csv find replace csv modifier csv bulk edit csv tool data cleaning

Formulas

The delimiter auto-detection algorithm scores each candidate delimiter by counting occurrences per row and selecting the one with the lowest variance (most consistent column count):

scored = variance(countd,row) for rows r 1..5

Where d is the candidate delimiter from the set {, ; \t |}, countd,row is the number of times delimiter d appears in that row (outside quoted fields), and the delimiter with the lowest score and at least 1 occurrence is selected.

For regex replacement, the engine applies the JavaScript String.prototype.replace with a constructed RegExp object using the global flag:

cellnew = cellold.replace(new RegExp(pattern, "g"), replacement)

Where pattern is the user-supplied regex and replacement may contain capture group references $1, $2, etc.

Reference Data

Replacement ModeInput RequiredBehaviorUse Case
Find & Replace (Literal)Search string + Replacement stringCase-sensitive exact match within cell valueFix typos, rename categories
Find & Replace (Case-Insensitive)Search string + Replacement stringCase-insensitive match within cell valueNormalize inconsistent casing
Regex ReplacePattern + Replacement (supports $1 groups)Full regex substitution per cellStrip prefixes, reformat phone numbers
Overwrite Entire ColumnStatic valueEvery cell in the column becomes the static valueSet default status, clear a column
Conditional ReplaceCondition pattern + Replacement valueOnly replaces if cell matches the conditionReplace only empty cells or specific values
PrependPrefix stringAdds prefix to start of every cell valueAdd country codes, URL prefixes
AppendSuffix stringAdds suffix to end of every cell valueAdd file extensions, units
Clear (Empty)NoneSets every cell in the column to empty stringRemove sensitive data before sharing
Trim WhitespaceNoneStrips leading/trailing whitespace from each cellClean imported data
UppercaseNoneConverts entire cell to uppercaseNormalize codes, SKUs
LowercaseNoneConverts entire cell to lowercaseNormalize emails, slugs
Title CaseNoneCapitalizes first letter of each wordFormat names, titles

Frequently Asked Questions

Per RFC 4180, fields containing the delimiter, double-quotes, or newlines must be enclosed in double-quotes. The parser tracks a quoted-state flag: when it encounters an opening quote at the start of a field, it treats all subsequent characters - including delimiters and newlines - as part of the field value until it finds a closing quote followed by a delimiter or end-of-line. Escaped quotes within a field are represented as two consecutive double-quotes (""), which the parser collapses to a single quote in the output.
The tool wraps RegExp construction in a try-catch block. If the pattern is syntactically invalid (e.g., unbalanced parentheses, invalid quantifiers), the tool displays an error toast with the specific JavaScript RegExp error message and does not modify any data. Your original CSV remains untouched until a valid operation completes.
Yes. Add multiple replacement rules, each targeting a different column index or header name. Rules are applied sequentially in the order listed - the output of rule 1 becomes the input for rule 2. This means if rule 1 modifies column 3 and rule 2 also targets column 3, rule 2 operates on the already-modified data. Reorder rules using the drag handles if sequence matters.
The output serializer re-quotes any field that contains the delimiter, a double-quote, or a newline character. Fields that do not require quoting are written without quotes. This means the output may differ from the original quoting style (e.g., if the original quoted every field regardless), but it remains fully RFC 4180-compliant and parseable by any standard CSV reader.
The limit is 50 MB. Since the entire file is loaded into browser memory as a string and then parsed into a 2D array, a 50 MB CSV can consume approximately 200-400 MB of RAM depending on cell count and JavaScript engine overhead. Exceeding this risks crashing the browser tab. For larger files, consider using a command-line tool such as awk, sed, or Python's csv module.
Trailing newlines at the end of the file are stripped before parsing. Completely empty rows (rows where all cells are empty strings) in the middle of the file are preserved in the output. If a row contains fewer fields than the header row, missing fields are treated as empty strings. If a row contains more fields than the header, excess fields are preserved but not targetable by header name - only by index.