2013-05-20 5 views
0

Je suis en train de remplacer par insertion dans tous les fichiers dans le répertoire avec la commande suivante:modèle sed remplacer par la nouvelle ligne

find . -type f -exec sed -i.bak ':begin;$!N;s/\(@Autowired\)\n\(public .*\)\((ServletRequest\)/\2() \{\}\n&/;tbegin' {} \; 

Voici ce que je suis en train de faire:

match :

@Autowired 
public something(ServletRequest 

Remplacer par:

public something() {} 
@Autowired 
public something(ServletRequest 

Je suis en train d'essayer d'ajouter un constructeur par défaut à toutes mes classes Java dans un certain répertoire/paquet. Je ne peux pas sembler correspondre à la nouvelle ligne

Répondre

0

Cela semble fonctionner:

sed '/@Autowired/{:l 
    N;s/\(.*public[ ]*\)\([^(]*\)\((ServletRequest\)/public \2() {}\n\1\3/; 
    /ServletRequest/!bl}' input 

et si vous avez le bit ServletRequest suivant toujours la @Autowired:

sed '/@Autowired/{ 
    N;s/\(.*public[ ]*\)\([^(]*\)\((ServletRequest\)/public \2() { }\n\1\3/}' 
    input 
+0

obtenir une « option inconnue' s' "pour votre commande, quelque chose manque? – user979051

+0

La deuxième commande ne produit pas d'erreur mais le nom de la méthode est manquant lors du remplacement: public something() {} @Autowired public * manquant * (ServletRequest – user979051

Questions connexes