我想知道如何显示文件名以及与tar文件的特定单词匹配的行。
命令明智:
zcat file | grep "stuff" -r # shows what I want
zcat *.gz | grep "stuff" -ar # this fails
答案 0 :(得分:0)
您可以使用zgrep
:
对于单个文件,您可以使用以下命令显示文件名:
zgrep "stuff" file.gz /dev/null
对于多个文件:
zgrep "stuff" *.gz
答案 1 :(得分:0)
我不太确定问题是什么,但如果你在系统上寻找tar文件,那么就做这样的事情。这将以递归方式搜索当前目录和.tar文件的所有子目录。希望这可以帮助。
find -name "*.tar"
答案 2 :(得分:0)
也许这related answer可以提供帮助。它使用tar
解压缩(您需要添加-z
)并将归档的每个文件管道传输到awk
以便在其中“grepping”。
答案 3 :(得分:0)
如果zcat file | grep "stuff" -r
显示您想要的内容,则可以针对多个文件执行此操作:
for name in *.gz ; do zcat "$name" | grep -a "stuff" | sed -e "s/^/${name}: /" ; done
此命令使用globbing(*
)扩展到工作目录中的.gz
个文件列表,然后调用zcat
进行提取,grep
进行搜索, sed
用于在每个文件上添加文件名前缀。
请注意,如果您使用的是gzipped压缩包,那么大多数人会为其提供.tgz
或.tar.gz
,而不只是.gz
扩展。
答案 4 :(得分:0)
这将输出nameOfFileInTar:LineNumber:Match。使用greptar.sh tarfile.tar pattern
如果您不想要行号,请删除-n选项。如果您只想要行号,请在|cut -f1 -d:
grep
#!/bin/bash
TARFILE=$1
PATTERN=$2
tar ztf $TARFILE | while read -r FILE
do
res=$(tar zxf $TARFILE $FILE -O | grep -n $2 )
if [[ $? == 0 ]]; then
echo "$res" | while read -r line; do
echo $FILE:$line;
done
fi
done