J'ai un fichier Java. Je souhaite commenter toute ligne de code contenant la correspondance:
myvar
Je pense que sed devrait m'aider ici
sed 's/myVar/not_sure_what_to_put_here/g' MyFile.Java
Je ne sais pas quoi mettre:
not_sure_what_to_put_here
comme dans ce cas, je ne veux pas remplacer myVar mais je veux insérer
//
au début de n'importe quelle ligne myVar apparaît.
Tous les conseils
Capturez toute la ligne qui contient myvar
:
$ sed 's/\(^.*myvar.*$\)/\/\/\1/' file
$ cat hw.Java
class hw {
public static void main(String[] args) {
System.out.println("Hello World!");
myvar=1
}
}
$ sed 's/\(^.*myvar.*$\)/\/\/\1/' hw.Java
class hw {
public static void main(String[] args) {
System.out.println("Hello World!");
// myvar=1
}
}
Utilisez l'option -i
Pour enregistrer les modifications dans le fichier sed -i 's/\(^.*myvar.*$\)/\/\/\1/' file
.
Explication:
( # Start a capture group
^ # Matches the start of the line
.* # Matches anything
myvar # Matches the literal Word
.* # Matches anything
$ # Matches the end of the line
) # End capture group
Donc cela regarde la ligne entière et si myvar
est trouvé, les résultats sont stockés dans le premier groupe de capture, référencé à un \1
. Nous remplaçons donc la ligne entière \1
Par la ligne entière précédée de 2 barres obliques //\1
Bien sûr, les barres obliques inverses doivent s'échapper pour ne pas confondre sed
donc \/\/\1
notez également que les crochets doivent s'échapper à moins que vous n'utilisiez l'option regex étendue de sed
.
Essayer:
sed -n '/myVar/{s|^|//|};p' MyFile.Java
ce qui signifie: lorsqu'une ligne contient myVar
, remplacez le début de la ligne par //
.
Je faisais des recherches sur le même sujet et j'ai trouvé cette solution qui est plus simple en termes d'expression régulière
sed -e '/myvar/ s/^/\/\//' file
Cela ajoute //
à la colonne 0 de la ligne avec le motif correspondant.
Cependant, je cherchais une solution qui me permettrait d'ajouter un caractère avant le premier caractère de la ligne (pas sur la colonne 0).