2015-04-07 8 views

cevap

11

Mac'te, BSD sed, yedek için son ek gerektirir (ancak sonek boş bir dize olabilir, '') - bu, isteğe bağlı olarak GNU sed ile uyumlu değildir. Bu nedenle, komutunuz "2d son eki ile dosyayı yedekleyin ve… oops, verdiğin komut dosyası file.csv, ancak f bir sed komutu" olarak yorumlanır.

sed -i .bak -e 2d file.csv 

Bu, CSV dosyasındaki ilk veri satırını siler (başlık çizgisini yerinde bırakarak). Eğer BSD ve GNU sed ile çalışır, böylece kod yazmak istiyorsanız

, o zaman GNU sed-i seçeneğe bağlı soneki gerektirir (-i seçeneğe sonek eklemek var; işte o olup olmadığını belirler nasıl isteğe bağlı eki veya değil): boş bir ekini kullanmak ve BSD sed ve GNU sed hem komut işi olamaz

sed -i.bak -e 2d file.csv 

Not.

-e, komut satırında gerekli değildir, ancak oldukça sık kullanırım. Aynı zamanda burada gerekli olmadığı halde, tek bir alıntıda da sıklıkla alıntı yapıyorum.

İlk iki veri hattını silmek isterseniz, komut olarak 2,3d'u kullanın. İlk iki satırı silmek istiyorsanız, 1,2d'u kullanın. Yedekleme istemiyorsanız

, o zaman sed komut tamamlanıncaya sonra çıkarın (en kolay) veya iki aşamalı veya üç aşamalı dans kullanabilirsiniz ya: Bunlarla

sed 2d file.csv > file.csv.bak && 
mv file.csv.bak file.csv   # Oops; there went the links 

sed 2d file.csv > file.csv.bak && 
cp file.csv.bak file.csv 
rm -f file.csv.bak 

, ihtiyacınız olabilecek Bir kesme veya başka bir sinyal komut dosyasını sonlandırırsa, ara .bak aralığını temizlemek için trap komutları eklemek. sed Apple belgelerinden alıntı


- aslen o silmeye seçen bir answer yılında Diego tarafından kaydedildi, -i seçenek yedekleme kopyaları için kullanmak uzantısını belirleyen bir argüman alır.

-iextension

Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.

+0

Bu, ikinci satırdaki öğeyi siler, ancak ilk satırı değil: "sed 2d dosya.csv> file.csv.bak && cp file.csv.bak dosya.csv rm -f dosya.csv.bak" – NumenorForLife

+1

Dosyadaki ilk iki satırı nasıl sileceğimi ve dosyadaki ilk iki veri satırını nasıl sileceğimi ele aldım. Daha fazla İstediğiniz ne? –

2

sed -i.bak '2,3d' filename.csv aynı anda orijinal dosyanın yedeğini (.bak dolayısıyla kullanımı) oluştururken başvuruluyor ne bu komut yapmasıdır dosyayı düzenler

(eğer başlıklara sahip varsayarak) çizgileri 1 ve 2 silecektir. Satır silme işlemi '2,3d', orijinal dosyanın 2. ve 3. satırlarını silecektir.

+0

Başlıklarım yoksa ne yapmalıyım? – NumenorForLife

+1

Sonra '2,3d' yerine '1,2d' kullanın –

+0

Görünen yedekleme dosyasını oluşturmak istemezsem ne olur? – NumenorForLife