sed: iki satırı eşleştir


11

Kayıtları iki satıra bölünmüş bir metin dosyası var. Onları tek bir satıra koymak istiyorum. Kayıtlar şuna benzer:

2013-07-29
 apt-get install git
2013-07-29
 apt-get install rsync
2013-07-31
 apt-get install nmap
2013-08-02
 apt-get install cifs-utils
2013-08-05
 apt-get install telnet

Aşağıdakileri almak istiyorum:

2013-07-29 apt-get install git
2013-07-29 apt-get install rsync
2013-07-31 apt-get install nmap
2013-08-02 apt-get install cifs-utils
2013-08-05 apt-get install telnet

Denedim sed, ancak iki çizgiyi eşleştiremiyorum. Biraz hile var mı sed, yoksa daha iyi bir araç var mı?


İki çizgiyi eşleştirmek istediğiniz gibi görünmüyor ve bir eşleşme bulduktan sonra çizgiye daha fazla katılmak istiyorsunuz. Evet?
kurtm

Yanıtlar:


13
sed 'N;s/\n/ /'
  • N bir sonraki girdi satırını desen alanına birleştirir
  • s/\n/ / satırları bir boşlukla ayıran yeni satırı değiştirir.

veya:

sed -n 'N;s/\n/ /;/regex/p'
  • -n son komut olarak desen alanının otomatik yazdırılmasını devre dışı bırakır
  • /regex/p normal ifade ile eşleşen satırları yazdırır

gİkiden fazla satıra katılmanız durumunda değiştirmeler için değiştiriciyi kullanın , örn N;N;N;s/\n/ /g.


hatırlamak için işaret: sed hatlar üzerinde çalışıyor! sed 's/>\n</>,</'sed bir seferde hatlarda çalıştığını anlayana kadar işe almaya çalışırken yaşlarımı geçirdim . bir hızlı duckduckgo arama ve @peterph saçımın geri kalanını tutmama izin verdi
northern-bradley

6

Görünüşe göre apt-getçizgilerin önünde boşluk var. diyor:

sed -e :a -e '$!N;s/\n / /;ta' -e 'P;D' inputfile

istenen sonucu vermelidir.

Alternatif olarak şunları da kullanabilirsiniz paste:

paste -d' ' - - < inputfile
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.