Kabuk komutlarını kullanarak bir ascii dosyasının ilk n satırlarını nasıl silerim?


92

İlk 5-10 satırda ascii metin bilgisi içeren çok sayıda dosyam var. Bir kabuk betiğinde, bu ilk birkaç satırdaki metni kaldırmak istiyorum, böylece saf matris bilgisini başka bir programda kullanabiliyorum. Bunu yapmak için bash shell komutlarını nasıl kullanabilirim?

Herhangi bir yardımı varsa, RedHat ve Ubuntu linux sistemlerini kullanıyorum.

Yanıtlar:


143

Dosya bir link veya hardlink olmadığı sürece, sed, tail veya awk kullanabilirsiniz. Aşağıdaki örnek

$ cat t.txt
12
34
56
78
90

sed

$ sed -e '1,3d' < t.txt
78
90

Ayrıca geçici dosya olmadan yerinde sed kullanabilirsiniz: sed -i -e 1,3d yourfile. Bu hiçbir şey yankılanmayacak, sadece yerinde dosyayı değiştirecek. Sonucu başka bir komuta yönlendirmeniz gerekmiyorsa, bu daha kolaydır.

kuyruk

$ tail -n +4 t.txt
78
90

awk

$ awk 'NR > 3 { print }' < t.txt
78
90

8
Ayrıca geçici dosya olmadan yerinde sed kullanabilirsiniz: sed -i -e 1,3d yourfile. Bu hiçbir şey yankılanmayacak, sadece yerinde dosyayı değiştirecek. Sonucu başka bir komuta yönlendirmeniz gerekmiyorsa, bu daha kolaydır.
Yanick Girouard

1
@YanickGirouard, @IgnacioVazquezAbrams! Siz ikiniz az önce araştırmamda bana bir ton el emeği kazandırdın! :)
Paul

2
@Svetlana sed -iözellikle. Çoğu uygulama, dosyayı siler ve yenisiyle değiştirir; orijinali başka bir yerde bıraktıktan sonra, bağlantılar için çalışmaz.
jw013

6
'1,3d', +4, et.c. anlamına geliyor? Soru n satırları içindi, ama n'in ne olduğunu söylemedin (görünüşe göre n, örneklerinizde 2'dir, ancak bir noob için n'yi değiştirmek için neyin değişeceği belli değil)
Robin Manoli

3
Bu geçici bir dosya kullanır, yani% 100 kullanım alanı olan disk alanı için çok kullanışlı değildir. Bunu tam anlamıyla "yerinde" yapan bir çözüme sahip olmak ilginç olurdu.
Shai

10

sed -i '1,3d' file.txt

Bu ilk 3 satırı file.txt dosyasından siler.


6

Tablodaki satırlar sekme karakterine sahipse:

grep '␉' <input_file >output_file

( değişmez bir sekme karakteri olmak) veya eşdeğerde

sed -n '/␉/p' <input_file >output_file

Bir bash / ksh / zsh komut dosyasında $'\t', örneğin grep $'\t'veya gibi bir sekme için yazabilirsiniz sed -n $'/\t/p'.

Dosyanın başında 10 satırı silmek istiyorsanız:

tail -n +11 <input_file >output_file

( +1110 çizgiyi elimine etmeyi unutmayın , çünkü +11“11 çizgisinden başla” ve 1'den gelen kuyruk çizgileri anlamına gelir) veya

sed '1,10d' <input_file >output_file

Linux'ta GNU sed'in -iyerinde dosyaları değiştirme seçeneğinden yararlanabilirsiniz:

sed -i -n '/\t/p' *.txt

Veya bir kabuk döngüsü ve geçici dosyalar kullanabilirsiniz:

for x in *.txt; do
  tail -n +11 <"$x" >"$x.tmp"
  mv "$x.tmp" "$x"
done

Veya dosyaları yerinde değiştirmek istemiyorsanız, bunun yerine farklı bir ad verin:

for x in *.txt; do
  tail -n +11 <"$x" >"${x%.txt}.data"
done

3
"sekmeli" genellikle "sekmeli karakterlerle girintili değil" "bir tabloda güzel basılmış" anlamına gelir.
Ignacio Vazquez-Abrams,

@ IgnacioVazquez-Abrams biliyorum. Güzel yazdırılmış tablo bazen sekme karakterleri kullanır; bu, hizalanmış sütunlardan daha kolay anlaşılırdır. Elbette, eğer Paul örnek bir girdi verirse, daha iyi bir eşleşme verebilirim.
Gilles,

2

Vim'i Ex modunda kullanabilirsiniz:

ex -sc '1d5|x' file
  1. 1 ilk satıra taşı

  2. 5 5 satır seç

  3. d silmek

  4. x kaydet ve kapat


0

echo "a \ nb" | sed '1d' # ilk satırı siler

cat list.txt | sed '1d'> list.csv # list.txt dosyasını oku ve list.csv'yi ilk satır olmadan yaz

Diğer faydalı komutlar:

grep '^ |' # ilk karakteri bulur (pipe |)

s '| / | // g'

sed 's / // g' # boşlukları siler


0

Yüzdeye göre

Kullanılması bashhatlarının mutlak numaranız yerine yüzde numarasını kullanarak bir dosya temizlemek için:

sed -i -e 1,$( printf  "$((`cat php_errors.log | wc -l` * 75 /100 ))" )d php_errors.log

Dikkat edin, bu komut bir kopya oluşturmadan, yerinde içeriği siler çünkü bu yıkıcı olabilir.

Belirtilen dosyadan satırların ilk% 75'ini siler.

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.