Commande Linux pour remplacer la chaîne de caractères dans le fichier de GRANDE taille avec une autre chaîne
J'ai un énorme fichier SQL qui est exécuté sur le serveur. Le cliché est de ma machine et en elle il y a quelques paramètres relatifs à ma machine. Donc, fondamentalement, je veux que chaque occurrence de "c://temp"
pour être remplacer par "//home//some//blah"
Comment cela peut-il être fait à partir de la ligne de commande?
Il vous manque un suiveur % dans votre commande. Il est s%foo%de la barre de% pas s%foo%bar
OriginalL'auteur coderama | 2009-08-07
Vous devez vous connecter pour publier un commentaire.
sed est un bon choix pour les gros fichiers.
C'est un bon choix parce que ne pas lire le fichier en entier à la fois pour le changer. Citant le manuel:
Pertinentes de la section du manuel est ici. Une petite explication suit
Exemple
C'est la commande que je suis en tapant: sed-i.bak -e 's%C:\\temp\%/home/liveon/public_html/tmp' liveon.sql et c'est l'erreur que je reçois: sed: -e expression n ° 1, char 41: indéterminé `s' de la commande de n'importe qui?
Il manque le final %, la commande est s%foo%bar%
Aussi, RD, assurez-vous de barres obliques inverses correctement.
OriginalL'auteur Vinko Vrsalovic
Juste pour être complet. En place de remplacement à l'aide de
perl
.Pas des antislashes nécessaire. 😉
-i
drapeau sans extension, vous obtenez pas de sauvegarde. Si vous voulez une sauvegarde, essayez-i.bak
qui se chargera de l'édition sur place et vous donner une copie de l'original queoriginal.bak
, assez bien pour gratuit.Je laisse ma version du système de contrôle de la poignée rend les sauvegardes.
c'est agréable pour vous, j'en suis sûr, mais il suppose que les fichiers en question sont sous contrôle de version et que vous savez ce que j'ai.bak ne et qui ont choisi de ne pas l'utiliser. Je souhaite juste que les gens qui recommandent le commutateur-i serait de prendre deux secondes pour expliquer la différence entre -i et-i.bak. Il va vraiment faire mal si les fichiers que vous jouez avec ne sont pas sous contrôle de version et de vous faire une simple faute de frappe (e.g, oublier l'option-p).
OriginalL'auteur ire_and_curses
Essayer sed? Quelque chose comme:
Échapper à toutes ces barres obliques rend ce regard si horrible, voici un exemple simple qui change foo bar.
Comme d'autres l'ont noté, vous pouvez choisir votre propre délimiteur, ce qui permettrait d'éviter la se penchant un cure-dent syndrome de dans ce cas:
L'intelligent chose à propos de sed, c'est qu'il fonctionne sur un flux plutôt qu'un fichier à la fois, de sorte que vous pouvez traiter de gros fichiers en utilisant seulement une faible quantité de mémoire.
OriginalL'auteur Paul Dixon
Il y a aussi un non-standard de l'utilitaire UNIX, rpl, qui fait exactement la même chose que le
sed
exemples; cependant, je ne suis pas sûr de savoir sirpl
fonctionne streamwise, doncsed
peut être la meilleure option ici.Non, jamais entendu parler de l'homme à l'extérieur de l'util; il est venu dans maniable pour faire un lot-remplacer le travail sur quelques milliers de fichiers texte une fois et je l'ai gardé dans ma boîte à outils.
Il serait important de dire pourquoi vous recommandons dans ce cas (ou pourquoi vous pourriez le faire, puisque vous la moitié de reprendre la recommandation). C'est, plutôt que de simplement jeter le nom d'un utilitaire, dites-nous ce que vous avez aimé à ce sujet, s'il vous plaît.
la rca est de nice pour de simples remplacements parce qu'il a un moyen beaucoup plus convivial de la syntaxe que de la combinaison de sed et de trouver qu'il remplace. Il a également soigné l'exécution de la sec où il vous dira ce qu'il faudrait remplacer, sans faire le remplacement. C'est la principale limite est qu'il ne le droite remplacements et pas des expressions régulières.
Tyler a cloué.
OriginalL'auteur Meredith L. Patterson
La
sed
commande peut le faire.Plutôt que de s'échapper de la slash, vous pouvez choisir un autre séparateur (_ dans ce cas):
merci! C'est maintenant corrigé.
OriginalL'auteur stefanw
L'-p va traiter ce script comme une boucle, il va lire le fichier ligne par ligne de course de la regex de recherche et de remplacement.
-je Cet indicateur doit être utilisé en conjonction avec l'option-p. Cette commande Perl à éditer le fichier.
-e signifie Simplement exécuter ce code perl.
Bonne chance
OriginalL'auteur Logan
rester bouche bée
OriginalL'auteur ghostdog74