Sed kullanarak belirli bir kelimeden sonra metni nasıl değiştirebilirim?


12

Adlı bir dosyam var .ignore. Değiştirilmesi gerekiyor projdir. Örneğin:

ignore \..*
ignore README
projdir Snake

Snake'i örneğin "PacMan" ile değiştirmem gerekiyor. Adam sayfasını okudum ama ne yapacağım hakkında hiçbir fikrim yok.

Yanıtlar:


18

İle başlayan bir satırı arayın projdirve tüm satırı yenisiyle değiştirin:

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^ve $satır başı / satır sonu işaretleyicileri olduğundan, desen tüm satırla eşleşir; .*herhangi bir şeyle eşleşir. -iSöyler seddoğrudan değişiklikleri yazmak için .ignoresadece çıktılamayıp yerine,


İçin uzun seçeneğini kullanırsanız -i, bu --in-placeörnek daha fazla kendi kendine belgeleme olacaktır.
Elijah Lynn

5

Bir yaklaşım, saklamak istediğiniz parçalar için referanslar kullanarak tüm satırı yeniden yazmaktır:

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/\1PacMan\2/'

Başka bir yaklaşım, satırın o kısmını yeniden yazmaktır, ancak yalnızca başka bir bölüm eşleşirse:

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

Her iki örnek de ikinci boşlukla ayrılmış kelimeyi ilk sözcüğün bulunduğu satırlarda yeniden yazar projdir.


3

Bu eski bir yazı olmasına rağmen ve sizin için kabul edilen cevapla çözülmüş gibi görünse de, asıl soru cevaplanmamıştır. Yani bütünlük ve başkalarına yardım etmek için:

İşte aslında "projdir" ile başlayan satırlar için değil "Snake" ile eşleşen cevap ...

sed -r 's/(^.*)Snake/\1PacMan' .ignore

Bu, "Snake" dahil olmak üzere satırın başlangıcındaki her şeyi "Snake" + "PacMan" öncesi her şeyle değiştirir. \ 1, içinde eşleşenlerle () eşleşir. "Yılan" dan sonraki her şey el değmeden kalır.


1
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^ projdir dize projdir ile başlayan satırı bulmaktır. Orada. * $ Aynı satırdaki projdir'den sonra dizeyi temsil eder. PacMan projdir dize, değiştirdiğimiz dizedir. g global içindir - projdir ile başlayan tüm bu satırları değiştirmek. .ignore dosyanın adıdır


1
Lütfen cevabınızı uzatabilir ve ne olduğunu açıklayabilir misiniz?
Romeo Ninov

Bir komutun veya kod parçasının nasıl ve neden çalıştığına dair açıklamalar içeriyorsa, yanıtlar çok daha kullanışlıdır.
Anthony Geoghegan

Umarım bu düzenleme sonrası daha faydalıdır
Tinu
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.