Khi tìm kiếm mã cho chuỗi, tôi liên tục gặp phải sự cố mà tôi nhận được kết quả vô nghĩa, ít bối cảnh. Ví dụ, nếu một cuộc gọi chức năng được chia trên 3 dòng, và tôi tìm kiếm tên của một tham số, tôi nhận được tham số trên một dòng của chính nó và không phải là tên của hàm.Làm cách nào để grep cho toàn bộ, có thể được bao bọc, các dòng mã?
Ví dụ, trong một tập tin chứa
...
someFunctionCall ("test",
MY_CONSTANT,
(some *really) - long/expression);
grepping cho MY_CONSTANT sẽ trả về một dòng trông như thế này:
MY_CONSTANT,
Tương tự như vậy, trong một khối bình luận:
/////////////////////////////////////////
// FIXMESOON, do..while is the wrong choice here, because
// it makes the wrong thing happen
/////////////////////////////////////////
Tham lam cho FIXMESOON mang lại câu trả lời rất bực bội:
// FIXMESOON, do..while is the wrong choice here, because
Khi có hàng nghìn lần truy cập, kết quả một dòng là vô nghĩa. Những gì tôi muốn làm là có grep được nhận thức của điểm bắt đầu và điểm dừng của dòng mã nguồn, một cái gì đó đơn giản như có nó xem xét ";" vì bộ tách dòng sẽ là một khởi đầu tốt.
Điểm thưởng nếu bạn có thể đặt nó trở lại toàn bộ khối nhận xét nếu lần truy cập nằm trong nhận xét.
Tôi biết bạn không thể làm điều này với grep một mình. Tôi cũng nhận thức được tùy chọn để có grep trả về một số dòng ngữ cảnh nhất định. Bất kỳ đề xuất về cách thực hiện theo Linux? FYI ngôn ngữ ưa thích của tôi là C và Perl.
Tôi chắc chắn rằng tôi có thể viết một cái gì đó, nhưng tôi biết rằng ai đó phải đã làm điều này.
Cảm ơn!
Dunno, nhưng đó là một câu hỏi hay! – mpen
thay cho một giải pháp tốt, bạn luôn có thể sử dụng '-C n' của grep cho các dòng' n' của ngữ cảnh –