Ответ 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
.