2008-10-06 18 views
3

J'ai un tas de fichiers java à partir desquels je veux supprimer les lignes javadoc avec la licence [je le change sur mon code].Suppression de texte multiligne à partir de plusieurs fichiers

Le modèle que je cherche est

^\* \* ProjectName .* USA\.$

mais adapté à travers les lignes

est-il un moyen sed [ou un éditeur couramment utilisé dans Windows/Linux] peut faire une recherche/remplacement pour un modèle multiligne?

Répondre

0

Oui. Utilisez-vous sed, awk, perl ou autre chose pour résoudre ce problème?

La plupart des outils d'expression régulière vous permettent de spécifier des modèles multi-lignes. Faites juste attention aux expressions régulières qui sont trop gourmandes, ou elles feront correspondre le code entre les commentaires s'il existe.

Voici un exemple:

/\*(?:.|[\r\n])*?\*/ 
perl -0777ne 'print m!/\*(?:.|[\r\n])*?\*/!g;' <file> 

imprime tous les commentaires fonctionnent ensemble. Le (: la notation doit être utilisée pour entre parenthèses non-capture/ ne doit pas être échappé parce que l'expression -0777 délimite est utilisé pour activer le mode slurp et -n permet lecture automatique

.!..

(de: http://ostermiller.org/findcomment.html)

0

Probablement quelqu'un cherche toujours à cette solution de temps en temps Voici un

utilisez awk pour trouver les lignes à supprimer ensuite utiliser diff pour enlever les lignes... et laissez sed nettoyer

awk "/^\* \* ProjectName /,/ USA\.$/" input.txt \ 
    | diff - input.txt \ 
    | sed -n -e"s/^> //p" \ 
    >output.txt 

Une note d'avertissement: si le premier motif existe alors que le second ne est pas, vous perdrez tout le texte ci-dessous le premier motif - afin de vérifier que la première.

+0

Cela semble génial! .. sauf que 'diff' est bête! Si vous avez des modèles comme SSH2 Keys dans un fichier, et que vous essayez d'en supprimer un, ne l'utilisez pas. Il faudra une ligne du haut du fichier puis le reste d'ailleurs. – TommyTheKid

Questions connexes