I tried grep -v '^$'
in Linux and that didn't work. This file came from a Windows file system.
问题:
回答1:
Try the following:
grep -v -e '^$' foo.txt
The -e
option allows regex patterns for matching.
The single quotes around ^$
makes it work for Cshell. Other shells will be happy with either single or double quotes.
UPDATE: This works for me for a file with blank lines or "all white space" (such as windows lines with "\r\n" style line endings), whereas the above only removes files with blank lines and unix style line endings:
grep -v -e '^[[:space:]]*$' foo.txt
回答2:
Keep it simple.
grep . filename.txt
回答3:
$ dos2unix file
$ grep -v "^$" file
Or just simply awk
awk 'NF' file
If you don't have dos2unix, then you can use tools like tr
tr -d '\r' < "$file" > t ; mv t "$file"
回答4:
grep -v "^[[:space:]]*$"
The -v makes it print lines that do not completely match
===Each part explained===
^ match start of line
[[:space:]] match whitespace- spaces, tabs, carriage returns, etc.
* previous match (whitespace) may exist from 0 to infinite times
$ match end of line
Running the code-
$ echo "
> hello
>
> ok" |
> grep -v "^[[:space:]]*$"
hello
ok
To understand more about how/why this works, I recommend reading up on regular expressions. http://www.regular-expressions.info/tutorial.html
回答5:
You can remove blank line with this example:
grep . filename.txt
回答6:
I prefer using egrep
, though in my test with a genuine file with blank line your approach worked fine (though without quotation marks in my test). This worked too:
egrep -v "^(\r?\n)?$" filename.txt
回答7:
Same as above answers
grep -v -e '^$' foo.txt
Here, grep -e means extended version of grep. '^$' means that there is no character between ^(Start of line) and $(end of line). '^' and '$' are regex characters.
So the command grep -v will print all the lines that do not match this pattern (No characters between ^ and $).
This way empty blank lines are eliminated
回答8:
If you have sequences of multiple blank lines in a row, and would like only one blank line per sequence, try
grep -v "unwantedThing" foo.txt | cat -s
cat -s
suppresses repeated empty output lines.
Your output would go from
match1
match2
to
match1
match2
The three blank lines in the original output would be compressed or "squeezed" into one blank line.
回答9:
Tried hard but this seems to work (assuming \r
is biting you here)
printf "\r" | egrep -xv "[[:space:]]*"
回答10:
grep pattern filename.txt | uniq
回答11:
awk 'NF' file-with-blank-lines > file-with-no-blank-lines
回答12:
Using Perl:
perl -ne 'print if /\S/'
\S
means match non-blank characters.
回答13:
here is another way of removing the white lines and lines starting with # sign. I think this is quite useful to read configuration files.
[root@localhost ~]# cat /etc/sudoers | egrep -v '^(#|$)'
Defaults requiretty
Defaults !visiblepw
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS"
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
stack ALL=(ALL) NOPASSWD: ALL
回答14:
egrep -v "^\s\s+"
egrep already do regex, and the \s is white space.
The + duplicates current pattern.
The ^ is for the start