Hi Tôi có một tập tin chứa một danh sách các url, trông giống như dưới đây:grep + A: in tất cả mọi thứ sau khi trận đấu
file1:
http://www.google.com
http://www.bing.com
http://www.yahoo.com
http://www.baidu.com
http://www.yandex.com
....
Tôi muốn có được tất cả các hồ sơ sau: http://www.yahoo.com, kết quả trông giống như dưới đây:
file2:
http://www.baidu.com
http://www.yandex.com
....
tôi biết rằng tôi có thể sử dụng grep để tìm ra số dòng nơi yahoo.com đang sử dụng
$grep -n 'http://www.yahoo.com' file1
3 http://www.yahoo.com
Nhưng tôi không biết cách lấy tệp sau số dòng 3. Ngoài ra, tôi biết có một lá cờ trong grep -A in các dòng sau trận đấu của bạn . Tuy nhiên, bạn cần xác định số lượng dòng bạn muốn sau trận đấu. Tôi tự hỏi là có một cái gì đó để có được xung quanh vấn đề đó. Giống như:
PSEUDO CODE:
$ grep -n 'http://www.yahoo.com' -A all file1 > file2
Tôi biết chúng tôi có thể sử dụng số dòng tôi nhận và wc -l để nhận được số dòng sau yahoo.com, tuy nhiên .. cảm thấy khá lame.
Mong được một giải pháp tiện dụng và dễ dàng. Hãy tự do chỉ trích tôi vì đã làm phức tạp vấn đề ngay từ đầu và các lệnh awk và sed cũng được hoan nghênh!
bạn có thể giải thích cú pháp awk một chút không? Hiểu biết của tôi: /yahoo/tìm kiếm dòng sử dụng cụm từ thông dụng, sau đó từ dòng đó, tạo biến có tên là y và sau đó đặt giá trị là 1, sau đó nếu dòng được in phụ thuộc vào giá trị của y. Sau đó, mọi dòng sẽ được in sau yahoo. Tôi không hoàn toàn chắc chắn về lệnh "tiếp theo" –
Tệ của tôi, tôi đã quên giải thích. Vui lòng xem cập nhật của tôi. –
Nếu tôi hiểu nó một cách chính xác nó nên đọc như thế này: y = 0 cho dòng trong file: if (/ yahoo /): y = 1 đi đến dòng tiếp theo if (y ! = 1): dòng in –