这是我的看法:
while read filename; do tar -xOf file.tar "$filename" | grep 'pattern' | sed "s|^|$filename:|"; done < <(tar -tf file.tar | grep -v '/$')
解释如下:
while read filename; do
-这是一个循环…tar -xOf file.tar "$filename"
-提取每个文件…| grep 'pattern'
-在这里放置图案…| sed "s|^|$filename:|";
-在文件名前加上,因此看起来像grep。盐调味。done < <(tar -tf file.tar | grep -v '/$')
-结束循环,获取与您的文件有关的文件列表while read
。
一条条件:如果
|文件名中有OR栏(),则此行将中断。
嗯 实际上,这是一个不错的bash函数,您可以将其附加到
.bashrc文件中:
targrep() { local taropt="" if [[ ! -f "$2" ]]; then echo "Usage: targrep pattern file ..." fi while [[ -n "$2" ]]; do if [[ ! -f "$2" ]]; then echo "targrep: $2: No such file" >&2 fi case "$2" in *.tar.gz) taropt="-z" ;; *) taropt="" ;; esac while read filename; do tar $taropt -xOf "$2" | grep "$1" | sed "s|^|$filename:|"; done < <(tar $taropt -tf $2 | grep -v '/$') shift done}


