Tôi có tập tin này:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
Tôi muốn tìm kiếm tệp này cho một chuỗi cụ thể và in mọi thứ trước khi chuỗi này mở ra {
và mọi thứ sau chuỗi này cho đến khi kết thúc }
. Tôi đã cố gắng để đạt được điều này với sed nhưng nếu tôi cố gắng in mọi thứ trong phạm vi, /{/,/string2/
ví dụ như sed in này:
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
Nếu tôi tìm kiếm chuỗi "string2", tôi cần đầu ra là:
sometext2{
string2
string3
}
Cảm ơn.
grep -n '' <infile | sed ...
. Các sed
lệnh sẽ cần sửa đổi; cụ thể là các bit /
địa chỉ /
tìm kiếm ^
các neo hàng đầu. Vì vậy, nếu bạn đang sử dụng câu trả lời của tôi, bạn có thể làm được : grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'
. Tất cả các dòng đầu ra sẽ được thêm tiền tố với số dòng của tệp gốc theo sau là dấu hai chấm 1:sometext1{\n2:string1
và v.v. sed
sẽ chỉ lọc những gì nó sẽ lọc trước đó, ngoại trừ mỗi dòng đầu ra mở bằng một số.