Her şey göz önünde bulundurulursa, dosyanın tamamını yuvarlayarak gitmek en hızlı yol olabilir.
Temel sözdizimi aşağıdaki gibidir:
sed -e '1h;2,$H;$!d;g' -e 's/__YOUR_REGEX_GOES_HERE__...'
Unutmayın, dosya çok büyükse, dosyanın tamamını yuvarlayarak bir seçenek olmayabilir. Bu gibi durumlarda, burada verilen diğer yanıtlar, küçük bir bellek ayak izi üzerinde çalışması garanti edilen özelleştirilmiş çözümler sunar.
Diğer tüm kesmek ve eğik çizgi durumları için, yalnızca -e '1h;2,$H;$!d;g'orijinal sedregex argümanınız tarafından takip edilen hazırlıkları yapmak işi hemen hemen alır.
Örneğin
$ echo -e "Dog\nFox\nCat\nSnake\n" | sed -e '1h;2,$H;$!d;g' -re 's/([^\n]*)\n([^\n]*)\n/Quick \2\nLazy \1\n/g'
Quick Fox
Lazy Dog
Quick Snake
Lazy Cat
Ne yapar -e '1h;2,$H;$!d;g'?
1, 2,$, $!Parça hattı doğrudan aşağıdaki komutu çalışır çizgiler bu sınırı şartnamecilere vardır.
1: Sadece ilk satır
2,$: İkinci satırdan başlayan tüm satırlar
$!: Sonuncusu dışındaki her satır
Böylece genişledi, N satır girişinin her satırında olan şey bu.
1: h, d
2: H, d
3: H, d
.
.
N-2: H, d
N-1: H, d
N: H, g
gKomut Satır belirtici verilmez, ancak önceki dkomut özel bir hüküm yok " Başlat sonraki döngüsü. " Ve bu engeller gson dışındaki tüm hatlarda çalışan.
Her komutun anlamı gelince:
- Birinci
hve ardından H, her bir satır kopyalarda s girdi hatları bahsedilen sedsitesindeki tutma alanı . (İsteğe bağlı metin arabelleğini düşünün.)
- Daha sonra,
dbu satırların çıktılara yazılmasını önlemek için her satırı atar. Ancak tutma alanı korunur.
- Son olarak, son satırda,
gher satırın tutma alanından birikmesini geri yükler, böylece sedregex'ini tüm girdi üzerinde çalıştırabilir (her seferinde bir satırdan ziyade), ve böylece \ns üzerinde maç .