Je suis dans le répertoire avec des fichiers composés de nombreuses lignes de lignes telles que ceci: , puis une ligne qui se termine: p> J'essaie d'éliminer Je peux obtenir: p> fonctionner, mais cela crée des fichiers qui conservent les anciens fichiers. Suppression du drapeau -E se traduit par une erreur de modèle de substitution non définie. P> même affaire avec: p> pensées? P> P> P> :( float) code> à partir de chaque fichier (mais laissez le numéro) et supprimez également la ligne de nettoyage. P>
6 Réponses :
sed -i -e 's/ :(float)//g' *
sed -i '' -e 's/:(float)//' -e '/^.chuck/d' * This way you are telling sed not to save a copy (null length backup extention to -i) and separately specifying the sed commands.
Pour que les gens obtiennent la "chaîne de source de transformation non déterminée", ceci est efficacement la réponse. Sur certaines versions de SED (notamment la version BSD, incluse avec MacOS), vous devez inclure explicitement la chaîne vide '' '' '' '' code> après le
-i code> lorsque vous ne voulez pas que SED Pour faire une sauvegarde, sur d'autres plates-formes, vous pouvez laisser cela. Les messages d'erreur que les sorties SED lorsqu'elles sont nécessaires et que vous ne le laissez pas dehors, sont malheureusement plutôt cryptiques.
sed -ie -e expression [files...]
Vos numéros sont séparés avec (float) code> par le caractère
: code>. Par conséquent, vous pouvez utiliser AWK / CUT pour obtenir vos numéros. Sa plus simple qu'une regex
Vérifiez si vous avez des noms de fichiers impairs dans le répertoire.
Voici un moyen de dupliquer votre erreur: P>
$ rm "-e s:x:" rm: invalid option -- 'e' $ rm -- "-e s:x:"
Explication: strong> p> Je peux obtenir: em> p> fonctionner, mais cela crée des fichiers qui conservent les anciens fichiers. Em> p> C'est parce que -I extension em> p>
Modifier les fichiers en place, enregistrer des sauvegardes avec l'extension spécifiée em>. Si une extension de longueur zéro em> est donnée, aucune sauvegarde ne sera enregistrée. P>
BlockQuote> Dans ce cas Pour fournir une extension de longueur zéro, vous devez utiliser La suppression du drapeau -E donne une erreur de modèle de substitution interminée. em> p> Lorsque vous supprimez le Si la sortie de la chaîne de commandes ci-dessus est aussi dans ce cas, Si d'une manière ou d'une autre, le premier nom de fichier qualifie comme une fonction de remplacement SED -I '' 'S /: (flotteur) // g' * code> p>
SED -Je '' 'S / [Chuck]: nettoyage ... // g' * code> p>
sed code> 's
i code> est censé fonctionner de cette façon p>
E code> est en cours d'interprétation de Extension em> que vous souhaitez enregistrer vos sauvegardes avec. Donc, tous vos fichiers d'origine seront sauvegardés avec un
E code> annexci à leurs noms. P>
-i '' code>. p>
-i
-i code> et
'' code> afin de fonctionner. P>
E code> immédiatement après
-i code >, p>
SED -I 'S /: (flotteur) // g' * code> p>
S /: (flotteur) // g code> sera maintenant interprété comme l'argument extension em> à
i code> drapeau. Et le premier fichier de la liste des fichiers produits par shell expansion de
* code> est interprété comme une fonction
SED code> (plus probablement
S / Expression régulière / Remplacement / Drapeaux < / Code> Fonction) Vous pouvez vérifier cela en cochant la sortie de p>
SEDFN = $ (ECHO * | CUT -D '' -F1); [[$ {SEDFN: 0: 1} == "s"]]; echo $? code> p>
0 code>, notre hypothèse est validée. P>
S / S / SED valide CODE> SED, les autres noms de fichiers seront interprétés comme des fichiers réguliers de SED pour fonctionner. P> P>
Qu'est-ce que "crée des fichiers qui conservent les anciens fichiers" signifie?
Si j'ai un fichier appelé ABC. Il supprime les lignes du fichier ABC, mais crée un fichier appelé Abce.
Le
g code> n'est pas nécessaire si le motif n'apparaît qu'une fois par ligne.
Je sais que je suis en retard, mais
sed -ie 'S /: (float) // g' * code> et
sed -ie 's / [mandrin]: nettoyage ... / / g '* code> ne fera probablement pas ce que vous attendez; Le
() code> autour de
(flotteur) code>, le
[] code> autour
[float] code> et le
. .. code> dans
nettoyage ... code> sont tous des modèles spéciaux. Avec
sed -ie 'S /: (float) // g' * code>, il correspondrait probablement
: float code> aussi. Et avec
sed -ie 's / [mandrin]: nettoyage ... // g' * code>, il ne correspondrait pas
[mandrin]: nettoyage ... code > Mais correspondrait au
K: Nettoyage UP123 CODE>.