
Wie kann ich ein (Bash-)Skript schreiben, das alle .tex-Dateien in einem Ordner nach dem Vorkommen von durchsucht \todo
und den Dateinamen und die Zeilennummer ausgibt, wo es vorkommt?
Was ich bisher habe:
#!/bin/bash
for texfile in *.tex ; do
**Scan for \todo**
**output $textfile$ , linenumber**
done
Ich möchte sicher sein, dass meine .tex-Dateien \todo{sometext}
bei der Übermittlung keine Inhalte enthalten.
Es muss nicht Bash sein, ich habe das nur der Einfachheit halber gewählt. Grep usw. wäre sicherlich willkommen.
Antwort1
grep
Dies kann zwar von selbst erledigt werden, Sie können es aber bei Bedarf auch in ein Skript einbinden:
grep -nr '\todo' *.tex
-r
für rekursiv
-n
zur Anzeige der Zeilennummer in der Datei
Standardmäßig zeigt grep die Zeile an, die die Übereinstimmung enthält. Bei manchen Formaten kann das eine Menge Ausgabe bedeuten. Wenn Sie die Ausgabe so einschränken möchten, dass Sie nur die Übereinstimmung und ein paar Zeichen auf beiden Seiten erhalten, verwenden Sie Folgendes:
egrep -nor '.{0,20}\\todo.{0,20}' *.tex
Das -o
bedeutet „nur passendes Ergebnis anzeigen“, allerdings würde dann nur angezeigt \todo
. Um einen Kontext zu schaffen: Wir erlauben eine beliebige Anzahl von Zeichen bis zu 20 auf beiden Seiten der Übereinstimmung. Das .
stimmt mit allem überein und das {0,20}
wiederholt diese Übereinstimmung bis zu 20 Zeichen lang.