PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (BASH) - grep - "exact match"



syrius
18.09.2016, 21:11
Guten Abend,

stehe derzeit vor einem Problem das ich gern ohne viele Schleifen, etc. umgehen möchte. Folgendes dazu:

Es gibt eine Datei namens "done-path.db" mit folgendem inhalt


/home/archived/folder-1/datei1.txt
/home/archived/folder-2/datei1-super.txt

Nun habe ich in einer Variable "$line" den Inhalt


datei1.txt

wird nun ein "grep" wie folgt gemacht,


cat done-path.db | grep "${line}"

gibt es als Ausgabe:


/home/archived/folder-1/datei1.txt
/home/archived/folder-2/datei1-super.txt

erhalten möchte ich lediglich


/home/archived/folder-1/datei1.txt

Ich weiß, dass man eine exakte Übereinstimmung mit


grep -Fx "..."

erwirken kann. Nur, wenn sich in der Variable auch der Pfad zur Datei befindet, welcher sich differenziert, ist die Ausgabe gleich NULL. Die Lösung ist sicher gänzlich einfach, bin nur schon den ganzen Tag am Schreiben...

Gruß

jbs
18.09.2016, 21:22
cat done-path.db | grep "${line}\n"

Zeilenumbruch anhängen vielleicht?

syrius
18.09.2016, 21:26
Zeilenumbruch anhängen vielleicht?

? ? ? Nein.

Nimbus
18.09.2016, 21:38
Also bei mir funktioniert das genau so wie ich glaube, dass es funktionieren soll.
Belegst du die Variable auch wirklich? Falls sie nämlich leer ist würde das das Ergebnis erklären ("" als Anforderung ist durch jede Zeile erfüllt).

syrius
18.09.2016, 21:54
Also bei mir funktioniert das genau so wie ich glaube, dass es funktionieren soll.

Ja, super. In dem Beispiel hier habe ich die Verzeichnisse und Dateinamen anderweitig benannt. Mit dem oben genannten Beispiel klappt das natürlich ^^ warum auch immer. Ich versuche das hier nachzustellen so gut möglich.

Sag ja... schreib schon den ganzen Tag -.-

Nimbus
18.09.2016, 22:00
Dann hast du vermutlich Pfade/Dateinamen, die sich am Ende nicht mehr unterscheiden oder?
/home/archived/folder-1/datei1.txt
/home/archived/folder-2/super-datei1.txt
/home/archived/folder-2/trooper-datei1.txt
/home/archived/folder-2/lights-are-gonna-find-me-datei1.txt

Dann löst eventuell "cat done-path.db | grep "/$line" dein Problem

syrius
18.09.2016, 22:04
Dann hast du vermutlich Pfade/Dateinamen, die sich am Ende nicht mehr unterscheiden oder?

Ja, exakt. Danke, genau das ist es! ^^ *lach*

1stAid
18.09.2016, 22:11
https://www.online-utility.org/text/grep.jsp
Text
/home/archived/folder-1/datei1.txt
/home/archived/folder-2/datei1-super.txt

regex

(.*?)datei1\.txt

Ausgabe
/home/archived/folder-1/datei1.txt