Ich würde gerne wissen, ob es einen Weg gibt, wie ich alle Zeilen, die mit beginnen, cat
ablegen php.ini
und entfernen kann;
Wenn die Datei beispielsweise Folgendes enthält:
; - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE
;
; - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
; - Show all errors except for notices
;
error_reporting = E_ALL & ~E_NOTICE
und ich habe den richtigen Befehl ausgeführt cat | {remove comments command}
, dann würde ich am Ende mit:
error_reporting = E_ALL & ~E_NOTICE
Hinweis - ich davon aus, dass cat
wäre der beste Weg, dies zu tun , aber ich bin wirklich gut mit der Antwort unter Verwendung eines anderen Dienstprogramm wie awk
, sed
, egrep
usw.
error_reporting = E_ALL & E_NOTICE ; Show all errors, except for notices
? Sollte der Kommentar auch in diesem Fall entfernt werden?cat
ist das Tool zum Verketten von Dateien.grep
ist das Werkzeug, um Linien anhand von Mustern zu filtern.sed
undawk
kann auch diese Zeilen ändern.Antworten:
Sie können verwenden:
quelle
Sie müssen eine Datei nicht durch grep leiten, grep verwendet Dateinamen als Befehlszeilenargumente.
druckt alle Zeilen mit Ausnahme derjenigen, die mit einem # Zeichen beginnen. Sie können das Kommentarzeichen beliebig ändern.
Wenn Sie mehr als ein Kommentarzeichen haben (vorausgesetzt, es steht am Anfang einer Zeile)
quelle
grep '^[^;]' filename
. Ich kann jedoch nicht mit seiner Portabilität sprechen!egrep
istgrep -E
. Man kann auchgrep -ve '^[;#]' -e '^//'
egrep
können Sie die Verwendung von sparencat
. Mit anderen Worten, erstellen Sie weniger Prozesse (egrep
vscat
+egrep
) und verwenden Sie weniger Puffer (Pipe voncat
bisegrep
vs keine Pipe).Es ist im Allgemeinen eine gute Idee, die Verwendung von
cat
einzuschränken, wenn Sie einfach eine Datei an einen Befehl übergeben möchten, der sie selbst lesen kann.Mit diesem Befehl werden Kommentare entfernt, auch wenn sie mit Leerzeichen oder Tabulatoren eingerückt sind:
quelle
[[
Zeichenklassen]]
mit demegrep
Befehl kombinieren, der seit mindestens einem Jahrzehnt veraltet ist.das schließt Zeilen aus, die mit dem ';' beginnen, und leere Zeilen.
Gibt in Regex
^
den Anfang einer Zeile und$
das Ende einer Zeile an,^$
gibt also Zeilen an, bei denen das Zeilenanfangszeichen und das Zeilenendezeichen direkt nebeneinander stehen.quelle
egrep -v '^;'
egrep -v '^[[:blank:]]*;' file.ini
Ein einfacher
awk
Einzeilerawk '/^;/{next}1' input_file
sollte den Trick machen.quelle
awk '!/^;/' input_file
ist genug.Sowie Jaypal würde ich höchstwahrscheinlich auch
awk
für diese Zwecke verwenden. Es ist schlimmer zu erwähnen, dass Perl manchmal für solche Zwecke recht praktisch ist:Perl-Regexps sind leistungsstärker als die von awk, und manchmal benötigen Sie sie.
quelle
perl -ne 'print unless /^;/' data.txt
cat
funktioniert in diesen Beispielen gut, wenn Sie es als Proxy für die allgemeineren "alles, was Text auf STDOUT generiert" betrachten. Unix-Pfeifen sind das Beste seit geschnittenem Brot, imho. :)Bei dieser Ausarbeitung der Antwort von @ shabunc wird Perl verwendet, um Kommentare (einschließlich Inline-Kommentare) zu entfernen und dann alle Zeilen zu drucken, die etwas anderes als Leerzeichen enthalten.
Erläuterung:
s/;.*//
Verwendet den Substitutionsoperator (s/<regex>/<replacement>/
), um Instanzen eines Semikols und alles, was darauf folgt, in einer Zeile durch die leere Zeichenfolge zu ersetzen.print if /\S/
Gibt die Zeile aus, wenn sie mit dem regulären Ausdruck übereinstimmt. Hierbei\S
handelt es sich um eine Zeichenklasse, die mit allen Nicht-Leerzeichen übereinstimmt.quelle
Hier ist eine, die ich benutze, nur ';' mit dem Kommentarzeichen (z. B. '#' für viele UNIX-Dienstkonfigurationsdateien):
Dadurch werden alle Ganzzeilenkommentare (auch wenn sie führende Leerzeichen enthalten) sowie alle Kommentare, die auf Nichtkommentarzeilen enden, entfernt und auch Leerzeilen werden in Kürze aus der Ausgabe entfernt. Dies mag ohne die Pipeline möglich sein (mein Sed- oder Awk-Fu ist zugegebenermaßen nicht großartig), aber es ist so leicht für mich zu verstehen (und mich zu erinnern), dass ich dachte, ich würde es hier posten.
quelle
Beispiel zeige nur Zeilen + zeige keine neuen Zeilen oder leeren Zeilen:
ODER
quelle
egrep
ist längst veraltet.grep -E
ist der Befehl, den Sie hier suchen.Entfernt alle Kommentare und Leerzeilen aus der Datei file.txt
quelle
egrep
wird abgeschrieben. Verwenden Siegrep -Ev
stattdessen.Entfernt auch leere Zeilen
quelle
Mit dem folgenden Befehl können Sie die Zeilen mit Ausnahme von Leerzeilen und Zeilen, die mit # beginnen, in einer neuen Datei speichern
cat <file to be read> | egrep -v '^#|^$' > <file to be written at>
quelle
cat
Pfeife undegrep
wird abgeschrieben undgrep -E
für erweiterte Ausdrücke oder nur ersetztgrep -v
.