Chụp toàn bộ dòng có chứa 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
}
}
Sử dụng tùy chọn -i
để lưu các thay đổi trong file sed -i 's/\(^.*myvar.*$\)/\/\/\1/' file
.
Giải thích:
( # 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
Vì vậy, đây nhìn vào toàn bộ dòng và nếu myvar
được tìm thấy kết quả trong lưu trữ trong nhóm chụp đầu tiên, được gọi một \1
. Vì vậy, chúng tôi thay thế toàn bộ dòng \1
bằng toàn bộ dòng trước bằng 2 dấu gạch chéo trước //\1
tất nhiên các tiền tố cần thoát như không nhầm lẫn sed
vì vậy \/\/\1
cũng lưu ý rằng dấu ngoặc cần thoát trừ khi bạn sử dụng tùy chọn regex mở rộng là sed
.
Nguồn
2013-01-03 10:53:46
cho đến nay cả hai câu trả lời dưới đây sẽ thực hiện công việc cho bạn. Tôi muốn nhắc nhở bạn rằng, bạn phải tinh chỉnh mẫu "myvar" của bạn để tránh thay thế bất ngờ xảy ra. ví dụ. tất cả các dòng có chứa "myVariable hoặc myVarList hoặc myVarMap hoặc Object obj = new Object; // myVar trong nhận xét" sẽ được nhận xét. – Kent
@Điểm tốt. Nó phải càng chặt càng tốt. – dublintech