Bash-Skript, um den Inhalt einer Datei in einem Verzeichnis zu finden und Werte hinzuzufügen


0

Ich habe ein Verzeichnis mit einer großen Anzahl von Dateien. Ich möchte ein Bash-Skript schreiben an -

  1. Geben Sie dieses Verzeichnis ein
  2. Finden Sie heraus, welche von ihnen Perl-Skripts sind (aber keines von ihnen hat die Erweiterung .pl)
  3. Füge eine Zeile oben in jeder Zeile ein (ich beabsichtige, einen neuen Shebang hinzuzufügen) Wenn Sie kein Perl-Skript sind, tun Sie nichts

Ich kann nicht nach den Perl-Skripts suchen, habe es mit grep versucht, aber nicht den richtigen Befehl erhalten. Im dritten Schritt stecke ich auch fest.


Keine Möglichkeit, Ihren Punkt zu tun 3. Sie können diesen Beitrag sehen, unix.stackexchange.com/questions/87772/… und insbesondere die Antwort von Gilles, in der es heißt: There is no way to insert data at the beginning of a file, all you can do is create a new file, write the additional data, and append the old data. So you'll have to rewrite the whole file at least once to insert the first line.
MariusMatutiae

Okay, aber ist es möglich, den Text in der ersten Zeile durch etwas anderes zu ersetzen?
Suraj Bhatia

Antworten:


0

Um die Perl-Dateien zu finden, können Sie am besten Perl selbst zum Beurteilen verwenden. perl -c Gibt einen Exit-Code ungleich Null zurück, wenn die Datei kein korrekter Perl-Code ist. Dies gilt definitiv für MOST-Dateien, bei denen es sich überhaupt nicht um Perl handelt. Leider tut es dasselbe, wenn es mit fehlerhaftem Perl-Code gespeist wird und 0 zurückgibt, wenn die Datei eigentlich kein Perl-Code ist, sondern ohne Fehler analysiert werden kann, als wäre sie die Datei. Wenn Sie mit diesem Risiko leben können, kann dies im Kern Folgendes sein:

for FILE in * ; do
   if perl -c "$FILE" >/dev/null ; then
      sed -i -e '1i#!/usr/bin/perl' "$FILE"
   fi
done

Anmerkung: Wenn ich die Dateien trotzdem berührt habe, würde ich die Erweiterung .pl hinzufügen, es sei denn, es gibt einen wirklich ernsthaften Grund, blind zu sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.