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.
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.
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.
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".
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".
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"
$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:
- Replace "NULL" with empty (exact match, all columns)
- Replace "N/A" with empty (exact match, all columns)
- Replace "n/a" with empty (exact match, all columns)
- Standardize "active" → "Active" in Status column (case-insensitive contains)
- Standardize "inactive" → "Inactive" in Status column
- 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 →