İle sedbir sürgülü pencere yapabilirsiniz.
sed '1N;$!N;/141.299.99.1/P;D'
Bunu yapar. Ama dikkat - alıntı bilebash genişleyen deli davranış ! ! komut geçmişinizden komut dizesine girmeniz biraz delirebilir. Durumun bu set +H;olduğunu tespit ederseniz , komutun önüne önek koyun . Daha sonra yeniden etkinleştirmek için (ancak neden ???) daha set -Hsonra yapın.
Eğer Yani, eğer tabii ki, sadece geçerli olacak edildi kullanarak bash- Senden inanmıyorum gerçi. Ben oldukça belli çalışmakta olduğunuz csh- (kimin deli davranış kabuk olur ki bashc kabuk aldı aşırı geçmişi genişleme öykünür, ama belki değil) . Yani muhtemelen bir \!çalışması gerekir. Umuyorum.
Hepsi taşınabilir kod: POSIX üç operatörünü şöyle anlatıyor : (ancak bu açıklamanın 2001 gibi erken bir zamanda var olduğunu doğruladığımı belirtmek gerekir)
[2addr]NEklenen materyali orijinal materyalden ayırmak için \ngömülü bir \newline kullanarak, sondaki ewline değerini azaltarak bir
sonraki girdi satırını desen alanına ekleyin. Geçerli satır numarasının değiştiğini unutmayın.
[2addr]P
İlk \newline'a kadar desen boşluğunu standart çıktıya yazın.
[2addr]D
İlk \newline boyunca desen alanının başlangıç segmentini silin ve sonraki döngüye başlayın.
İlk satırda desen alanına ekstra bir çizgi eklersiniz, bu yüzden şöyle görünür:
^line 1s contents\nline 2s contents$
Sonra ilk satırda ve sonraki her satırda - sonuncusu hariç - desen alanına başka bir satır eklersiniz . Yani şöyle görünüyor:
^line 1\nline 2\nline 3$
IP adresiniz içinizde bulunursa P, ilk yeni satıra kadar inin, bu yüzden burada sadece 1. satır. Her döngünün sonunda Daynı şeyi seçiyor ve geriye kalanlarla başlıyorsunuz. Bir sonraki döngü şöyle görünür:
^line 2\nline 3\nline 4$
...ve bunun gibi. IP'niz bu üç taneden herhangi birinde bulunursa, en eskisi yazdırılır - her seferinde. Yani her zaman sadece üç satır ilerdesiniz.
İşte kısa bir örnek. Sıfırla biten her sayı için üç satırlı bir tampon yazdırılır:
seq 10 52 | sed '1N;$!N;/0\(\n\|$\)/P;D'
10
18
19
20
28
29
30
38
39
40
48
49
50
Bu sizin durumunuzdan biraz daha karmaşıktır çünkü probleminize daha yakından benzemek için 0\nyeni satırdan veya 0$desen alanının sonundan geçmek zorunda kaldım - ancak bunun bir çapa gerektirdiği için farklıdırlar - bu biraz zor olabilir desen-alanı sürekli değişir.
Çapanın esnek olduğu sürece çıktının da olduğunu göstermek için 10 ve 52'lik garip vakaları kullandım. Tamamen portatif olarak, algoritmaya güvenerek aynı sonuçları elde edebilirim:
seq 10 52 | sed '1N;$!N;/[90]\n/P;D'
Ve penceremi kısıtlarken aramayı genişlet - 0'dan 9'a ve 0'a ve 3 satırdan ikiye.
Herneyse, sen anladın.