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.
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
No comments yet.
Personal Internet VMware PHP Linux Shell Bluecoat Proxy Windows Hardware Virtualization Nagios MySQL DB Monitoring Mail Android Network Wyse Hacks Tomcat Postgres Apple Mac Backup BSD ZFS Solaris SmartOS Unix Multimedia Perl Database MongoDB CMS OTRS FreeBSD Wordpress LXC Nginx Proxmox DNS Graphics GlusterFS Security Chef HAProxy Icinga Ansible HTML MariaDB Containers Rancher Docker AWS ELK Kibana Logstash Filebeat Varnish PGSQL PostgreSQL ElasticSearch CouchDB Bash Macintosh Container Minio Grafana InfluxDB Databases NFS OSSEC SystemD Java Zoneminder Surveillance Elasticsearch SSL TLS Icingaweb2 Cloud Wireless Kubernetes Ubuntu