I've just spent interesting 20mins with my boss, trying to figure out why Bash wouldn't recognize our command to not output lines containing tabulator entries. The problem: grep -v "\t" tempfile # does not work
Still shows lines with tab-entries. At first we thought maybe Bash has a problem recognizing the tabulator, so my idea was to use sed instead of grep: sed -e '/\t/d' tempfile # works
It works with sed! So the \t is correctly recognized. Maybe a problem of grep only? After doing several tests, we finally found the solution. First we used an echo to force a tab sign within the grep command: grep -v "$(echo -ne "\t")" tempfile # works
So as soon as a sub-shell is opened to 'translate' \t into a tab-sign it works, how it is also written in the bash-manpage: Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: ... \t horizontal tab ...
Which leads to the following and final solution:
grep -v $'\t' /tmp/tempfile # works |