Linux/Searching compressed archives

Find out which file within an archive contains a text string:

7z e -so  example.7z   2>/dev/stdout  |grep -i -a -P "(Extracting|search term)"

The redirection of stderr to stdout using 2>/dev/stdout is necessary since 7z prints file names to stderr (prepended by the word "Extracting", hence "(Extracting|search term)"), but it needs to be in stdout to be picked up by grep through the pipe. Optionally, append |less (read: Wikipedia: less (Unix)).

7z is used since it apparently supports the widest range of archive formats, more than zgrep, bzgrep, and xzgrep.

If anyone has a better solution, feel free to add it.


If the archive is a TAR wrapped within a format such as GZip, BZip2, or XZip, the following command can be used:

7z e -so  example.tar.xz  |7z e -si -so -ttar  2>/dev/stdout | [piped commands here]