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 sed
regex 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
g
Komut Satır belirtici verilmez, ancak önceki d
komut özel bir hüküm yok " Başlat sonraki döngüsü. " Ve bu engeller g
son dışındaki tüm hatlarda çalışan.
Her komutun anlamı gelince:
- Birinci
h
ve ardından H
, her bir satır kopyalarda s girdi hatları bahsedilen sed
sitesindeki tutma alanı . (İsteğe bağlı metin arabelleğini düşünün.)
- Daha sonra,
d
bu satırların çıktılara yazılmasını önlemek için her satırı atar. Ancak tutma alanı korunur.
- Son olarak, son satırda,
g
her satırın tutma alanından birikmesini geri yükler, böylece sed
regex'ini tüm girdi üzerinde çalıştırabilir (her seferinde bir satırdan ziyade), ve böylece \n
s üzerinde maç .