2017-03-21 9 views
0

Ich bin mit diesem Befehl in einem .docx Inhalt der Suche:Wie wird der Dateiname wiedergegeben?

unzip -p *.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g' | grep $1 

Aber ich brauche den Namen der Datei, die das Wort enthält, was ich suchte. Wie kann ich es tun?

+0

Verwendung 'grep haben -l' statt sed + grep .. was ist die Ausgabe von' unzip -p'? Wenn es eine Liste von Dateinamen ist, brauchen Sie 'xargs', um sie an grep zu übergeben – Sundeep

+1

Sie scheinen zu versuchen, [' zipgrep'] neu zu erfinden (https://linux.die.net/man/1/zipgrep). Sieh dir die Quelle an. Es ist nicht sehr komplex. – tripleee

+0

entpacken -p outbut die Quelle der .docx Datei –

Antwort

0

Sie durch die Dateien über for Zyklus laufen können:

for file in *.docx; do 
    unzip -p "$file" word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g' | grep PATTERN && echo $file 
done 

Die && echo $file Teil druckt den Dateinamen, wenn grep das Muster findet.

+0

Danke! Du bist der wahre MVP: D –

0

Versuchen mit:

find . -name "*your_file_name*" | xargs grep your_word | cut -d':' -f1 
+0

Ich weiß nicht den Dateinamen. –

+0

suchen wird rekursiv sucht das Muster und Rohre zu grep. finally cut zeigt die Dateinamen an. – Sree

0

Wenn Sie GNU grep verwenden (wahrscheinlich, wie Sie auf Linux sind), könnten Sie diese Option verwenden möchten:

--label=LABEL

Anzeige-Eingang tatsächlich von Standard kommen Eingabe als Eingabe von der Datei LABEL. Dies ist besonders nützlich, wenn Werkzeuge wie zgrep, z. B. gzip -cd foo.gz | grep --label=foo -H something, implementiert werden. Siehe auch die -H Option.

So würden Sie so etwas wie

for f in *.docx 
do unzip -p "$f" word/document.xml \ 
    | sed -e "$sed_command" \ 
    | grep -H --label="$f" "$1" 
done 
Verwandte Themen