Использование sed для замены начала строки, когда найдено совпадение - программирование

Использование sed для замены начала строки, когда найдено совпадение

У меня есть файл Java. Я хочу прокомментировать любую строку кода, которая содержит совпадение:

 myvar

Я думаю, что sed должен помочь мне здесь.

 sed 's/myVar/not_sure_what_to_put_here/g' MyFile.java

Я не знаю, что добавить:

not_sure_what_to_put_here

как в этом случае, я не хочу заменять myVar, но я хочу вставить

//

в начало любой строки myVar.

Любые советы

4b9b3361

Ответ 1

Захватите всю строку, содержащую 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
    }
}

Используйте параметр -i, чтобы сохранить изменения в файле sed -i 's/\(^.*myvar.*$\)/\/\/\1/' file.

Пояснение:

(      # 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 

Итак, это касается всей строки, и если myvar найдено результаты, сохраненные в первой группе захвата, относятся к \1. Таким образом, мы заменяем всю строку \1 всей строкой, которой предшествуют две косые черты //\1, конечно, для forwardslashes требуется экранирование, а не для путаницы sed, поэтому \/\/\1 также отметим, что скобки требуют экранирования, если вы не используете расширенное регулярное выражение вариант sed.

Ответ 2

Try:

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

что означает: когда строка содержит myVar, замените начало строки на //.

Ответ 3

Я изучал ту же тему и нашел это решение, которое проще с точки зрения регулярного выражения

sed -e '/myvar/ s/^/\/\//' file

Это добавляет // в столбец 0 строки с шаблоном соответствия.

Тем не менее, я искал решение, которое позволит мне добавить символ до первого символа строки (не в столбце 0).