2008-10-13 11 views
9

Bunu yapmak için önemsiz bir komut dosyası yazabilirim ama unix ile daha fazla familliar elde etmek için devam eden araştırmamda yerleşik komutları kullanarak verimli yöntemler öğrenmek istiyorum.Bir dosya buluncaya kadar dosya satırlarını atlayın, geri kalanını kopyalayın

Değişken sayıda başlık satırına sahip çok büyük dosyalarla uğraşmam gerekiyor. Son başlık satırı 'LastHeaderLine' metninden oluşur. Bu çizgiden sonra herşeyi vermek isterim. (Ben yalancı pozitif maçları için endişelenmiyorum.)

cevap

6

sed kullanarak:

sed -ne '/LastHeaderLine/,$p' <inputfile 

Dosyanın sonuna regex maç her şeyi eşleşir. 'p', eşleşen satırları yazdırır.

Düzenleme:

Düşündüm de

, sen LastHeaderLine eşleşen satır yazdırmak istemiyorum. Bu sed ile yapmak zor. Perl, aşağıdaki yapabileceğini:

perl -ne 'if ($flag) {print;} if (/LastHeaderFile/) {$flag=1;}' <inputfile 

Bu kesinlikle regex maçı izleyen tek satırları yazdırmak istiyorum.

9

Neden bunun için awk denemiyorsunuz? Bu şuna benzer: NR == 1 ilk satırı için geçerlidir

awk 'NR == 1, /LastHeaderLine/ { next } { print }' myinputfile > myoutputfile 

, /LastHeaderLine/ son başlık satırı ile eşleşir. Virgül operatörü, iki düzenli ifadenin tümündeki tüm cümleler için {next} işlevinin aşağıdaki işlevine izin verir. Bu durumda daha fazla işlem yapılmadan sonraki giriş hattına geçilir. Diğer tüm giriş hatları için, hatlarını standart çıktıya basacak ve>> kullanarak yönlendirebilirsiniz.

20

Avi cevabına benzer, ancak "LastHeaderLine" ile satır eklemeden.

sed -e '1,/LastHeaderLine/d' 
+0

Benimkinden çok daha temiz :-) – Avi