Metin dosyasından bu satırı silerken, giriş metin dosyasının ilk satırını alma


11

Metin dosyasından bu satırı silerken, giriş metin dosyasının ilk satırını nasıl alabilirim?

Bir metin dosyası olsaydı /myPathToTheFile.txtböyle

► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

Bu satırı çıktı olarak almak istiyorum

► put returns between paragraphs

ve metin dosyam şimdi böyle olmalı

► for linebreak add 2 spaces at end
► _italic_ or **bold*

Bu işlemin maliyetinin dosya boyutuyla orantılı olduğunu unutmayın. Eğer dosya büyükse ve bunu sık sık yaparsanız, çok yavaş olacaktır.
CodesInChaos

Yanıtlar:


13
ex -s /myPathToTheFile.txt <<\EX
1p
1d
wq
EX

veya

ex -s /myPathToTheFile.txt <<< 1p$'\n'1d$'\n'wq

veya daha az yazarak:

ed -s /myPathToTheFile.txt <<< $'1\nd\nwq'

Vay, ed güzel kullanımı ...!
qwr

10

En azından GNU sed ile:

$ cat file
► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

$ sed -i '1{
w /dev/stdout
d}' file
► put returns between paragraphs

$ cat file
► for linebreak add 2 spaces at end
► _italic_ or **bold**

GNU sed ile tek astar olarak yazılabilir

sed -i -e '1 {w /dev/stdout' -e 'd}' file

6

Bir kabuk betiği istediğinizi varsayarsak, bu istediğinizi yapar:

NAME=$1
head -n 1 $NAME
sed -i '1d' $NAME


2

Sen kullanabilirsiniz head, tailve mv:

İlk satırı göster:

head -1 myPathToTheFile.txt

Son ( +2) satırları saklamak :

tail -n +2 myPathToTheFile.txt > file.tmp && mv file.tmp myPathToTheFile.txt

1

Dosya tanımlayıcıları ve biraz python

{
    { 
    head -n1 >&3; 
    3>&- tail -n +1;
    3>&- python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())';
    }<file 1<>file
} 3>&1

1

Baş ve kuyruk kullanma. Dosya target.txt

head -1 target.txt && tail -n+2 target.txt > tmp
mv tmp target.txt && rm tmp

Not: Geçerli klasörde varolan bir dosya tmp olmadığından emin olun, aksi takdirde kaldırılır.

Açıklama:

  • "head -1" ilk satırı seçer
  • "tail -n + 2 target.txt> tmp" 2. satırdan itibaren (dahil) tüm satırları seçer ve bunları tmp
  • mv orijinal dosyanın üzerine tmp yazar
  • rm tmp bu şekilde oluşturulan tmp dosyasını silecektir
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.