Opening a CSV in Excel to do find-and-replace sounds harmless until Excel turns your phone numbers into scientific notation, your leading-zero ZIP codes into integers, and your date strings into whatever date format your locale happens to use that day. Here's how to do it safely.

Why Excel is the wrong tool for editing CSV files

Excel's CSV handling is designed for humans looking at spreadsheets, not for treating CSV as the text format it actually is. The moment you open a CSV in Excel, several things can happen silently:

  • Numbers with leading zeros get truncated — "007", "01234", "00142" all become the number without the leading zeros
  • Long numeric strings become scientific notation — a 16-digit product ID becomes "1.23457E+15"
  • Date-like strings get auto-converted — "2024-03-15" might stay correct, but "15/3/24" might become March 15th or the 15th day of March depending on your locale, and "1-2" becomes February 1st
  • Phone numbers lose their formatting — "+1 (555) 867-5309" might get parsed as a formula or number

When you then save the file back to CSV, you've permanently transformed the data. The original values are gone.

For any find-and-replace operation on a CSV file, treating it as text — not a spreadsheet — is the right approach.

Find and replace in your browser

CSV Splitter Online's Find & Replace tab reads and writes the CSV as text, preserving exact values. It never auto-converts anything.

Step 1

Open the Find & Replace tab

Go to csvsplitteronline.com and click "Find & Replace" in the tool mode bar. Drop your CSV, TSV, or XLSX file.

Step 2

Scope your search

Choose whether to search all columns or a specific one. Scoping to a column is almost always better — if you're replacing "NULL" with empty in your Address column, you don't want it touching a "NULL" that appears in a Notes column where it's an actual product name. Select the column from the dropdown.

Step 3

Enter your search term

Type what you're looking for. By default, the search is a substring match (contains). Toggle "Exact match" if you only want to replace cells where the entire cell value equals your search term — useful for replacing "N/A" without also touching "N/A - Pending" or "Not N/A".

Step 4

Enter the replacement value

Type what you want to replace it with. Leave it blank to effectively delete the matched value — replacing "NULL" with nothing gives you empty cells instead of the literal string "NULL".

Step 5

Count matches first, then replace

Click "Count matches" before running the replacement. If you expect 200 replacements but the count says 12,000, something about your search term is matching too broadly. Verify before committing. Then click "Replace & Download" to get the modified file.

Common find-and-replace operations on CSV files

Standardizing status values

Your CRM exported contacts with status values like "Active", "active", "ACTIVE", and "Active ". Four variations that all mean the same thing, but will create four separate categories in your next CRM. Fix this in one pass:

  • Column: Status → Search: "active" (case-insensitive) → Replace: "Active"

Replacing placeholder values with empty

Exports from older systems often use "NULL", "N/A", "n/a", "—", "none", or "0" as placeholder values in empty fields. These need to be actual empty cells, not strings, for your import system to recognize them as blank.

  • Column: (all) → Search: "NULL" (exact match) → Replace: (empty)
  • Repeat for "N/A", "n/a", "none"

Fixing phone number format

Strip all formatting characters from a phone column to get clean digit strings:

  • Column: Phone → Search: "(" → Replace: "" (empty) — removes opening parentheses
  • Column: Phone → Search: ")" → Replace: ""
  • Column: Phone → Search: "-" → Replace: ""
  • Column: Phone → Search: "." → Replace: ""
  • Column: Phone → Search: " " → Replace: ""

Run these sequentially. After all 5 passes, you'll have pure digit strings like "15558675309".

Replacing a company name after a rebrand

Your old CRM has 3,000 contacts with "Acme Corp" as their company name. The company rebranded to "Apex Solutions":

  • Column: Company → Search: "Acme Corp" (exact match) → Replace: "Apex Solutions"

Using regex for advanced replacements

CSV Splitter Online's Find & Replace supports regular expressions for pattern-based replacements. Enable "Regex mode" to use them.

Extract domain from email addresses

Search:  ^[^@]+@
    Replace: (empty)
    Result:  [email protected] → company.com

Standardize date format from MM/DD/YYYY to YYYY-MM-DD

Search:  (\d{2})/(\d{2})/(\d{4})
    Replace: $3-$1-$2
    Result:  03/15/2024 → 2024-03-15

Remove HTML tags from a notes column

Search:  <[^>]+>
    Replace: (empty)
    Result:  "Hello <b>world</b>" → "Hello world"
Regex replace in CSV Splitter Online supports capture groups using $1, $2 etc in the replacement string, matching JavaScript regex syntax. Test your pattern on the count first — regex is powerful but easy to over-match.

Find and replace from the command line

For scripted or large-scale replacements, sed works directly on CSV text:

# Replace "NULL" with empty string across whole file
    sed 's/NULL//g' input.csv > output.csv

    # Replace only in a specific column is trickier — use awk or Python instead

For column-scoped replacements, Python is cleaner:

import pandas as pd

    df = pd.read_csv('input.csv', dtype=str)  # keep all as strings!

    # Replace in specific column
    df['Status'] = df['Status'].str.replace('active', 'Active', case=False)

    # Replace NULL placeholder with actual NaN (blank)
    df['Phone'] = df['Phone'].replace('NULL', '')

    df.to_csv('output.csv', index=False)

The critical line is dtype=str — it tells pandas to read every column as a string, preventing the same auto-conversion problems Excel has.

What to do after replacing

After a bulk find-and-replace, always do a quick sanity check:

  • Open the output file in CSV Splitter Online's split tab and check the row count — it should match the original
  • Check the preview table to confirm the replacements look correct in a few rows
  • Run the Validate tab to check that replacements didn't inadvertently create structural issues

If you replaced a partial string (not exact match), spot-check a few cells in the affected column to make sure you didn't replace something you shouldn't have.

Running multiple replacements in sequence

Real data cleaning usually requires multiple find-and-replace passes, not just one. A contact list from a legacy CRM might need all of these in sequence:

  1. Replace "NULL" with empty (exact match, all columns)
  2. Replace "N/A" with empty (exact match, all columns)
  3. Replace "n/a" with empty (exact match, all columns)
  4. Standardize "active" → "Active" in Status column (case-insensitive contains)
  5. Standardize "inactive" → "Inactive" in Status column
  6. Strip phone formatting characters from Phone column

In CSV Splitter Online, do this by chaining: run replacement 1, download the output, drop that output back in, run replacement 2, and so on. It adds a few steps but keeps each operation clearly defined and reversible — if step 3 produces unexpected results, you still have the output from step 2 to go back to.

For large numbers of replacements, a Python script is more efficient since you can apply all transformations in a single pass:

import pandas as pd

    df = pd.read_csv('contacts.csv', dtype=str)

    # Replace NULL and N/A placeholders across all columns
    df = df.replace({'NULL': '', 'N/A': '', 'n/a': '', 'none': '', 'None': ''})

    # Column-specific replacements
    df['Status'] = df['Status'].str.strip().str.title()  # "active" → "Active"

    # Strip phone formatting
    for col in ['Phone', 'Mobile', 'WorkPhone']:
    if col in df.columns:
    df[col] = df[col].str.replace(r'[\s\-\.\(\)]', '', regex=True)

    df.to_csv('contacts_clean.csv', index=False)
    print(f'Done: {len(df)} rows cleaned')

What to do after replacing

After any bulk find-and-replace, take two minutes to verify the output before using it:

  • Open the output file in CSV Splitter Online's Split tab and check the row count matches the original — a runaway replacement that matched too broadly can sometimes corrupt row structure
  • Preview the first 10 rows and check the affected columns look correct
  • If you used a contains-match rather than exact-match, sample 5–10 rows from the middle of the file to confirm the replacement wasn't too greedy
  • Run the Validate tab on the output to confirm the file is structurally sound before importing

The CSV Splitter Online workflow of "count matches → verify count makes sense → run replacement" is your safety net. If you expect 200 phone numbers to be reformatted and the count says 47,000, your search term is matching something you didn't intend. Verify the count before committing.

Find and replace in your CSV

Search by column, use regex, count matches before committing. Your data stays in your browser — nothing uploaded.

Try CSV Splitter Online free →

Frequently asked questions

Can I do find and replace across multiple CSV files at once?

Not directly in CSV Splitter Online — it processes one file at a time. For bulk replacement across many files, use a shell script: for f in *.csv; do sed 's/OldValue/NewValue/g' "$f" > "fixed_$f"; done. Or with Python, loop through glob.glob('*.csv') and apply the replacement to each file.

I replaced something I shouldn't have. Can I undo?

CSV Splitter Online doesn't modify the original file — it produces a new downloaded file. Your original is untouched. If you downloaded the modified file and need to go back, you'll need your original. This is why keeping your original file safe before doing bulk edits is important.

Why does "count matches" show 0 when I can see the value in my data?

Most commonly: trailing whitespace. The cell contains "Active " (with a trailing space) but you searched for "Active". Enable contains-mode rather than exact-match, or search for the value with a space. Another cause: the value has a non-breaking space (from copy-paste out of a browser or PDF) which looks like a regular space but isn't.

Ready to try it?

Use our free, browser-based CSV tools to apply what you've just learned — no upload, no signup.

Open Split CSV →