2010-04-01 15 views

cevap

51

GNU sed, uygun bir adresleme modu vardır:

sed -n '1~2!p' file 

hat 1 başlayarak anlamına gelir ve 2 adımda, baskı diğer tüm hatları ile.

Aynı şekilde, sen -n damla ve silebilir eşleşen hatları:

sed '1~2d' 

Ayrıca awk kullanılarak yapılabilir:

awk 'NR%2==0' file 

(hat sayısı 2 katları olduğunda, baskı satır)

+0

Bunun için teşekkürler! çok yararlı. –

+1

Macos üzerinde sed ile çalıştığımda "geçersiz komut kodu ~" hatasını alıyorum. Taşınabilirlik için –

31

Şu ana kadar düşünebileceğiniz en kısa yol:

sed -n 'g;n;p' file 

Bu GNU dışı sed sürümleri (yanı sıra GNU sed) ile çalışmalıdır.

+4

+1 –

+3

Bu, OS X üzerinde de çalışır! (Aksine 'sed -n 1 ~ 2! P'''.) Bu satırları 2,4,6, ... Ben satırları 1,3,5 almaya nasıl adam sayfasından çözemedim alır .. İlk satır eklemek, basit bir kesmek olsa da. – Nagel

+7

@Nagel: deneyin: '-n sed 'p, n' Dosya' ya da 'sed 'n, d' tek çizgiler çıkışı için Dosya'. Bu arada, 'g' bile hattının çıkışını için gerekli olduğunu düşünmüyorum:; iş gibi görünüyor Dosya ' 'p n'' -n sed. –

3

Perl çözeltisi:

perl -ne 'print if $. % 2 == 0' file 

$. bu sabah Nisan yanı espriler aptallar gibi görünüyor hat numaralı soru

+0

Adam, sizin için zayıf okuma becerilerini gösteren “sed” kelimesini istedi, ancak birisi bunu yararlı bulabilir, bu yüzden +1. –

+1

sed, awk ve perl'den beri sık sık cevap verebiliyorum. Hız ve basitlikte farklılıklar olsa da, bunların hepsi komut satırında veya kabuk komut dosyalarında kullanılır. –

İlgili konular