Howto: Linux command line utilities for removing blank lines from text files
Q. I want to change the formatting of a file. I just wanted to remove all blank lines from text file. How do I achieve this task w/o spending much time?
A. Yes, you do not have to waste your time making manual changes to files. Both Linux and UNIX systems come with file manipulation tools that can be used to remove all blank lines very quickly.
Task: Remove blank lines using sed
Type the following command:
$ sed '/^$/d' input.txt > output.txt
Task: Remove blank lines using grep
$ grep -v '^$' input.txt > output.txt
Both grep and sed use special pattern ^$ that matchs the blank lines. Grep -v option means print all lines except blank line.
Let us say directory /home/me/data/*.txt has all text file. Use following for loop (shell script) to remove all blank lines from all files stored in /home/me/data directory:
#!/bin/sh
files="/home/me/data/*.txt"
for f in $files
do
sed '/^$/d' $i > $i.out
mv $i.out $i
done
Subscribe to our free e-mail newsletter or RSS feed to get all updates.
You can Email this page to a friend.
Related Other Helpful FAQs:
- Delete text or paragraph between two sections using sed
- Linux Formatting a CDRW / DVD Media ( blank media ) Commands
- Howto delete empty lines using sed command under Linux / UNIX
- Shell Script To Number Lines Of Files
- Linux / UNIX Display Lines Common in Two Files
Discussion on This FAQ
Leave a Reply
We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!
Tags: blank line, blank lines, data directory, file manipulation, formatting, manipulation tools, manual changes, mv, sed command, sed remove blank line, shell script, unix systems



March 13th, 2008 at 5:08 pm
Is that last shell script wrong? The for loop is using variable f, and inside the loop, everything is using variable i. I think the script should look more like:
#!/bin/sh
files=”/home/me/data/*.txt”
# Next line is changed to use variable i, not f
for i in $files
do
sed ‘/^$/d’ $i > $i.out
mv $i.out $i
done