Je voudrais savoir s'il existe un moyen de cat
déposer php.ini
et de supprimer toutes les lignes commençant par;
Par exemple, si le fichier contient ceci:
; - 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
et j'ai exécuté la commande correcte cat | {remove comments command}
, puis je me retrouverais avec:
error_reporting = E_ALL & ~E_NOTICE
Note - Je suppose que cat
ce serait la meilleure façon de le faire , mais je suis en fait très bien avec la réponse en utilisant un autre utilitaire comme awk
, sed
, egrep
, etc.
error_reporting = E_ALL & E_NOTICE ; Show all errors, except for notices
? Le commentaire devrait-il également être supprimé dans ce cas?cat
est l'outil pour concaténer des fichiers.grep
est l'outil pour filtrer les lignes en fonction des motifs.sed
etawk
peut également modifier ces lignes.Réponses:
Vous pouvez utiliser:
la source
Vous n'avez pas besoin de diriger un fichier via grep, grep prend les noms de fichiers comme arguments de ligne de commande.
affichera toutes les lignes SAUF celles qui commencent par un # char. vous pouvez changer le caractère de commentaire comme vous le souhaitez.
Si vous avez plus d'un caractère de commentaire (en supposant que ce soit au début d'une ligne)
la source
grep '^[^;]' filename
. Je ne peux pas parler de sa portabilité!egrep
estgrep -E
. On peut aussi utilisergrep -ve '^[;#]' -e '^//'
egrep
peut vous faire économiser l'utilisation decat
. En d'autres termes, créez moins de processus (egrep
vscat
+egrep
) et utilisez moins de tampons (pipe decat
versegrep
vs no pipe).C'est généralement une bonne idée de limiter l'utilisation de
cat
si vous voulez simplement passer un fichier à une commande qui peut le lire seul.Cela dit, la commande suivante supprimera les commentaires, même s'ils sont en retrait avec des espaces ou des tabulations:
la source
[[
classe de caractères plus récent]]
avec l'utilisation de laegrep
commande déconseillée depuis au moins une décennie.cela exclura les lignes commençant par le «;» et les lignes vides.
en regex,
^
indique le début d'une ligne et$
la fin d'une ligne,^$
spécifie donc les lignes où le caractère de début de ligne et le caractère de fin de ligne sont l'un à côté de l'autre.la source
egrep -v '^;'
egrep -v '^[[:blank:]]*;' file.ini
Une simple
awk
doublureawk '/^;/{next}1' input_file
devrait faire l'affaire.la source
awk '!/^;/' input_file
assez.En plus de Jaypal, j'utiliserais très probablement
awk
à ces fins. Il est pire de mentionner que perl est parfois très pratique à de telles fins:Les expressions rationnelles de Perl sont plus puissantes que celles de awk et parfois vous pourriez en avoir besoin.
la source
perl -ne 'print unless /^;/' data.txt
cat
fonctionne très bien dans ces exemples si vous le considérez comme un proxy pour le plus générique "tout ce qui génère du texte sur STDOUT". Les tuyaux Unix sont la meilleure chose depuis le pain en tranches, à mon humble avis. :)Une élaboration sur la réponse de @ shabunc, qui utilise Perl pour supprimer les commentaires (y compris les commentaires en ligne), puis imprimer toutes les lignes contenant autre chose que des espaces.
Explication:
s/;.*//
utilise l'opérateur de substitution (s/<regex>/<replacement>/
) pour remplacer les instances d'un point-virgule et tout ce qui le suit sur une ligne avec la chaîne vide.print if /\S/
affiche la ligne si elle correspond à l'expression rationnelle\S
, qui est une classe de caractères correspondant à tous les caractères non blancs.la source
En voici une que j'utilise, remplacez simplement ';' avec le caractère de commentaire (par exemple '#' pour de nombreux fichiers de configuration de service UNIX):
Cela supprime tous les commentaires sur la ligne entière (même s'ils ont des espaces en tête) et tous les commentaires qui terminent les lignes sans commentaire, et supprime également les lignes vides de la sortie. Cela peut être possible sans le pipeline (mon sed- ou awk-fu n'est certes pas génial), mais c'est si facile pour moi de comprendre (et de me souvenir), j'ai pensé que je le posterais ici.
la source
Exemple afficher uniquement les lignes + ne pas afficher les nouvelles lignes ou les lignes vides:
OU
la source
egrep
est obsolète depuis longtemps.grep -E
est la commande que vous recherchez ici.Supprime tous les commentaires et les lignes vides du fichier.txt
la source
egrep
est amorti. Utilisezgrep -Ev
plutôt.Supprime également les lignes vides
la source
vous pouvez utiliser la commande suivante pour enregistrer les lignes, à l'exclusion des lignes vides et des lignes commençant par # dans un nouveau fichier
cat <file to be read> | egrep -v '^#|^$' > <file to be written at>
la source
cat
Pipe etegrep
est dépréciée et à remplacer pargrep -E
des expressions étendues ou tout simplementgrep -v
.