web-dev-qa-db-fra.com

Utilisation de sed pour remplacer le début de la ligne lorsqu'une correspondance est trouvée

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

21
dublintech

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.

39
Chris Seymour

Essayer:

sed -n '/myVar/{s|^|//|};p' MyFile.Java

ce qui signifie: lorsqu'une ligne contient myVar, remplacez le début de la ligne par //.

3
dogbane

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).

2
Sameer Naik