Komut satırını kullanarak bir metin dosyasının üstüne nasıl bir satır eklerim?


25

Zaten var olan bir dosyanın üstüne metin eklemek istiyorum. Bunu nasıl başarabilirim. Denedim echove teeancak başarılı olamadı.

sources.listTerminalden dosyanın üstüne repo satırı eklemeye çalışıyordum .

Not

Bir satır hızlı çözüme ihtiyacım var, çünkü başka bir yanıtlama yöntemi bana zaten biliniyordu


1
tee, örneğin dosyanın altına bir çizgi ekler echo "deb http://extras.ubuntu.com/ubuntu precise main" | sudo tee -a /etc/apt/sources.list- yönetici ayrıcalıkları almak için tee önce sudo'ya ihtiyacınız vardır. Ancak neden dünyadaki en iyi kaynaklar.in listesine bir şeyler eklemek istiyorsunuz?
Savvas Radevic,

2
@medigeek: OP'nin soru geçmişinde bir yerde bir CD-repo'dan yükleme / güncelleme hakkında bir şeyler bulacaksınız ... Sebep olabileceğinden şüpheleniyorum ...
ish

Teşekkürler @izx, Varsayımınız doğru. Sessizim etkilendim. Bu soruya cevap verebilir misin? Bu, yazılım merkezini kullanarak yerel bir repodan yükleme yapmak ve ayrıca en üst sıraya koymadan yerel repoyu en yüksek öncelik için ayarlamaktı. Tekrar teşekkürler.
Anwar

1
@izx, İşte yerel havuzum için en yüksek önceliği belirleme bağlantısı . Yazılım merkezi ile ilgili bu soruyu da kontrol edebilirseniz sevinirim . İlk yorumunuz için tekrar teşekkürler. çok sevindim.
Anwar

1
@medigeek, bu kadar nadir bir sorunun açıklaması için bu soruyu görebilirsiniz .
Anwar

Yanıtlar:


38

Bu aslında oldukça kolay sed:

  • sed -i -e '1iHere is my new top line\' filename

  • 1ised'in dosyanın 1. satırından sonra gelen metni eklemesini söyler; \Sonunda yeni satırı unutmayın, böylece mevcut satır 1 satır 2'ye taşınır.


1
Teşekkürler. Sadece not için: değiştirmek istiyorsanız s, i yerine kullanmak yerine kullanmak yerine 1i.
Anwar,

3
Ne yazık ki bu boş dosya için başarısız oluyor (yumruk çizgisi yok, bu yüzden sed hiçbir zaman eklemez).
Tino

@Tino Boş dosyalar için sadece kullanabilirsinizecho "Text Here" >> Filename
Flotolk

MacOS 10'da çalışmıyor
Krishna,

7

Genel olarak bir komut dosyası ile yerine düzenleme zor, ancak kullanabilirsiniz echo ve catdaha sonra vemv

echo "fred" > fred.txt
cat fred.txt t.txt >new.t.txt
# now the file new.t.txt has a new line "fred" at the top of it
cat new.t.txt
# can now do the rename/move
mv new.t.txt t.txt

Bununla birlikte sources.list ile oynuyorsanız, hataları tespit etmek için bazı doğrulama ve kurşun geçirmezlik işlemleri eklemeniz gerekir, çünkü bunu gerçekten kaybetmek istemezsiniz. Ama bu ayrı bir soru :-)


Bunu zaten yapabilirim. İzx'in verdiği gibi tek bir çözüme ihtiyacım var. ancak cevabınız için teşekkürler.
Anwar

1
@AnwarShah - ah özür dilerim! Bunu sorunuza söylemeliydin :-)
Sean

Cevabınız ve ayrıca yorumunuz için +1 itiraf ediyorum. (Daha fazlasını veremem)
Anwar

6
./prepend.sh "myString" ./myfile.txt

bilinmektedir prependolduğunubenim özel kabuğum :

#!/bin/sh
#add Line at the top of File
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
fi

Ayrıca bir göreli yol veya mutlak yol kullanın, iyi çalışması gerekir:

./prepend.sh "my New Line at Top"  ../Documents/myfile.txt

Güncelleme:

Bunun için kalıcı bir komut dosyası istiyorsanız, açın, nano /etc/bash.bashrcsonra da bu işlevi dosya sonuna ekleyin:

function prepend(){
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
fi

}

Terminalinizi yeniden açın ve keyfini çıkarın:

prepend "another line at top" /path/to/my/file.txt

5

Ve neden bunun için orijinal bir metin editörü kullanmıyorsunuz? ed standart metin editörüdür.

ed -s filename <<< $'1i\nFIRST LINE HERE\n.\nwq'

Veya komutların daha okunaklı olmasını istiyorsanız:

ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
  • 1: ilk satıra git
  • i: mod ekle
  • eklemek istediğin eşyaların ...
  • .: yerleştirmeyi durdur, normal moda geri dön
  • wq: yaz ve bırak, teşekkür ederim, güle güle.

Bununla birlikte kabuk değişkenlerini değiştirme (içinde FIRST LINE) nasıl kullanılır ?
vp_arth

1
içerik değişkeni ise @vp_arth first_linesonra: ed -s filename < <(printf '%s\n' 1i "$first_line" . wq). Değişkenin tek bir noktaya yayılmadığından ve yeni satır karakterleri içermediğinden emin olun (bu nedenle kullanıcı girişinden geliyorsa bunu temizleyin).
gniourf_gniourf

3

Her zaman awkseçenek vardır. stringDeğişkeni içeriğinizle değiştirin . Bu olsa yerinde bir değişiklik değil. Şahsen ben yerinde değişiklikler yapmaya meyilli değilim. Bu kesinlikle kişisel bir tercih. İki şey, -vawk ncinsinden bir değişkeni gösterir ve değişken burada bir satır numarasını etkin bir şekilde eşleştirmek için kullanılır NR == 1. Sadece değerini değiştirerek yollardan herhangi sayıda kullanabiliriz nve s.

string="My New first line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}'     file.source > file.target

Örnek:

% cat file.source                                                                                                                                      

First Line
Second Line
Third Line

% string="Updated First Line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target; cat ./file.target                      !698

Updated First Line
First Line
Second Line
Third Line

2

Vim'i Ex modunda kullanabilirsiniz:

ex -sc '1i|hello world' -cx sources.list
  1. 1 1. satırı seç

  2. i yeni metin satırı ekle

  3. x kaydet ve kapat


Şimdiye kadar sağlanan diğer çözümlerden çok daha basit. Teşekkür ederim.
Pothi Kalimuthu
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.