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.