Schreiben Sie ein Skript, das Dateinamen und Zeilennummern ausgibt, die bestimmten Text enthalten

Schreiben Sie ein Skript, das Dateinamen und Zeilennummern ausgibt, die bestimmten Text enthalten

Wie kann ich ein (Bash-)Skript schreiben, das alle .tex-Dateien in einem Ordner nach dem Vorkommen von durchsucht \todound 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

grepDies kann zwar von selbst erledigt werden, Sie können es aber bei Bedarf auch in ein Skript einbinden:

grep -nr '\todo' *.tex

-rfür rekursiv -nzur 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 -obedeutet „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.

verwandte Informationen