我想知道如何顯示文件名以及與tar文件的specfic字匹配的行。顯示文件名的tar文件
指揮英明:
zcat file | grep "stuff" -r # shows what I want
zcat *.gz | grep "stuff" -ar # this fails
我想知道如何顯示文件名以及與tar文件的specfic字匹配的行。顯示文件名的tar文件
指揮英明:
zcat file | grep "stuff" -r # shows what I want
zcat *.gz | grep "stuff" -ar # this fails
您可以使用zgrep
:
對於單個文件,您可以使用下面的命令來顯示文件名:
zgrep "stuff" file.gz /dev/null
對於多個文件:
它看起來像OP有tgz。而'zgrep'做得很好,裏面gzip文件grepping,我不認爲它會很好地工作在文件grepping用gzip壓縮包內_and_打印他們的名字。 –
他的例子顯示'* .gz' – Amit
是的,我知道,但OP也寫了「tar文件」。也許我錯了,他們的意思是「gz文件」。 –
我不太清楚問題是什麼,但是如果你在你的系統上尋找tar文件,那就幹這樣的事情吧。這將遞歸搜索當前目錄和任何子目錄中的.tar文件。希望這可以幫助。
find -name "*.tar"
不,它不會 - 你的意思是'發現'? OP不想查找tar文件,但grep查找文件_in a_ tar文件中的表達式。 –
哎呀,是我沒有 我的意思是: 找到-name「*的.tar」 – blakepeterman
現在說法是正確的,編輯的感謝。我只是害怕你的帖子還沒有真正回答這個問題:-) –
也許這個related answer可以提供幫助。它使用tar
來解壓縮(您需要添加-z
),並將壓縮文件的每個文件分配給awk
以在其中進行「刷新」。
如果顯示你想要什麼,你可以爲多個文件做到這一點:
for name in *.gz ; do zcat "$name" | grep -a "stuff" | sed -e "s/^/${name}: /" ; done
此命令使用通配符(*
)擴大到在你的工作目錄.gz
文件的列表,然後調用zcat
爲提取,grep
爲搜索和sed
前綴與每個文件的文件名。
請注意,如果您正在使用gzipped壓縮包,大多數人會給他們一個.tgz
或.tar.gz
而不僅僅是.gz
擴展名。
這將輸出nameOfFileInTar:LineNumber:Match。用greptar.sh tarfile.tar pattern
調用如果您不想要行號,請刪除-n選項。如果您只想要行號,請在grep
後加|cut -f1 -d:
#!/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
歡迎來到SO!請考慮使用'{}'按鈕來設置您的代碼的格式,以提高可讀性。 –
退房http://stackoverflow.com/questions/13983365/grep-from-tar-gz-without-extracting-faster-one –
那個按鈕是在編輯器中,請不要'{'和'}': - )您可以在每行之前放置4個空格。 –