In einer Linux-Shell möchte ich sicherstellen, dass alle bestimmten Dateien mit <?
genau dieser Zeichenfolge und keinen anderen Zeichen am Anfang beginnen. Wie kann ich grep oder eine andere verwenden, um "Datei beginnt mit" auszudrücken?
Bearbeiten: Ich verzeichne dies mit einem Platzhalter und head
gebe keinen Dateinamen in derselben Zeile an. Wenn ich ihn greife, wird der Dateiname nicht angezeigt. Scheint "^<?"
auch nicht die richtigen Ergebnisse zu liefern; Im Grunde bekomme ich das:
$> head -1 * | grep "^<?"
<?
<?
<?
<?
<?
...
Alle Dateien sind tatsächlich gut.
quelle
find
find
kann auch nur einfache Dateien direkt zurückgeben, um die Pipe zu starten.read
stattdessenhead
auch verwenden:for file in *; do [ -f "$file" ] || continue; read < "$file"; [[ "$REPLY" =~ ^\<\? ]] || echo "$file"; done
Mach das
grep
:Analysieren Sie die Dateinamen:
quelle
Sie können awk dafür verwenden:
quelle
Mit Ausnahme leerer Dateien scheint dieses Perl-Skript zu funktionieren:
Ich bin mir nicht sofort sicher, wie ich mit leeren Dateien umgehen soll. Ich wäre versucht, sie als separaten Sonderfall zu behandeln:
quelle
Versuche dies
Dadurch wird eine Liste aller Dateien angezeigt, die auf PHP enden, und anschließend durchlaufen. Echo des Dateinamens und dann Drucken der ersten Zeile der Datei. Ich habe gerade eingefügt
gibt Ihnen Ausgabe wie:
Dann können Sie am Ende einen normalen Grep verwenden, um das, was Sie sehen möchten, loszuwerden und nur Ausnahmen zu finden
Ausgabe:
quelle
for x in *.php;do echo $x \"
head -n1 $ x\";done
Bash 4.0
quelle
sollte tun, was Sie verlangen.
quelle
cat
Nutzunghead -1 file.txt | grep "^<?"
ist genug.command
ich die Datei als Argument nehmen werde. Es ist vielleicht nicht unbedingt notwendig, aber ich nehme es nicht raus :)diese:
gibt Ihnen so etwas:
Jede Datei, die Ihr Muster nicht enthält, wird mit "1" "markiert". Sie können damit spielen, bis es Ihren Bedürfnissen entspricht.
quelle
head -1 "$i" | grep '^<?' || echo "$i"
Der Dateiname wird nur gedruckt, wenn dies problematisch ist.Lassen Sie mich das ausprobieren
niemand sagte, wak sei nicht verfügbar :-)
quelle