Bir dosyada belirli bir dize sonra metin nasıl eklenir?


69

Şu anda echo "Hello World" >> file.txtbir dosyaya metin eklemek için kullanıyorum ancak belirli bir dizenin altına metin eklemem gerekiyor da "[seçenek]" diyelim, mümkün sedmü?

ÖRNEĞİN:

Giriş dosyası

Some text
Random
[option]
Some stuff

Çıktı dosyası

Some text
Random
[option]
*inserted text*
Some stuff

1
Daha kesin olmanız ve insanların size kesin komutlar vermesi için örnek metin vermeniz gerekir.
clement

Lütfen Q'nuzu düzenleyin inputve outputsatırları gösterin . Çünkü sen Q net değil. Yapabilirsin echo "Hello World [option]" >> file.txt, ama bir anlamı yok.

Başvuru için daha fazla bilgi sağlamak üzere soruyu düzenledim, ancak kabul edilen cevap, başarmaya çalıştığım şeydi
Javier Villanueva

Sadece bir yapılandırma dosyasını düzenlemek istiyorsanız, bu bulduğum en iyi çözümdür: unix.stackexchange.com/a/78076/20661
rubo77 21:16

Yanıtlar:


104

Maçtan sonra satır ekle

  • sed '/\[option\]/a Hello World' input

Eşleşmeden önce satır ekle

  • sed '/\[option\]/i Hello World' input

Ek olarak -i.bkp, sed seçeneğini kullanarak giriş dosyasını yerinde alabilir ve düzenleyebilirsiniz.


2
osx üzerinde olsunsed: 1: "/pattern/a some text here": command a expects \ followed by text
the_prole


Mac OSX için, seçenekten \ <<NEWLINE>>sonra eklemem gerekiyordua
Tom Howard

Yukarıdaki kod her bir maç için satırı ekler / ekler. Eğer sadece ilk maçın satırını eklemek / eklemek istiyorsanız 0,komutları sed '0,/\[option\]/a Hello World' inputsed '0,/\[option\]/i Hello World' input
hazırlayabilirsiniz

33

Evet, şununla mümkün sed:

sed '/pattern/a some text here' filename

Bir örnek:

$ cat test
foo
bar
option
baz
$ sed '/option/a insert text here' test
foo
bar
option
insert text here
baz
$

2
@javiervd İlk cevapta neyi kastettiğinden emin değilim? İlk önce cevaplanan zamanı kastediyorsan, yanılıyorsun. Zaman damgalarını dikkatlice izlemedin!
devnull

En son dize eşleştirdikten sonra eklemenin bir yolu var mı? Örneğin: foo bar option bar option baz . Yani desen olur foo bar option bar option addedstring baz mu?
Ari

4

İle awk:

awk '1;/PATTERN/{ print "add one line"; print "\\and one more"}' infile

Bazı karakterlerin kelimenin tam anlamıyla dahil edilemeyeceğini aklınızda bulundurun, bu yüzden bir kaçış dizisi kullanmak zorunda (ters eğik çizgi ile başlar), örneğin birinin yazmak zorunda kaldığı bir ters eğik çizgi yazdırmak için \\.

Aslında aynıdır sedancak ek olarak metindeki her gömülü yeni satırın önüne bir ters eğik çizgi gelmelidir:

sed '/PATTERN/a\
add one line\
\\and one more' infile

Kaçış dizileri hakkında daha fazla bilgi için kılavuza bakınız.


Bir awk satırı aslında metni değiştirmez, sadece çıktı verir.
Josef Klimuk
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.