Linux / Bash: Bir kalıba uyan her çizgiyi yorumlayın


3

sed az söylemek, bana yabancı. Bir C proje ağacını geçmek ve işlevi çağıran her satırı yorumlamak istiyorum LogMsg(). Aşağıdakileri başarabilecek bir şey:

foreach: line within *.c
  if: line contains "LogMsg"
    prepend "//"

Ya da öylesine. Ayrıca, o zaman, bunun daha zor olabileceğini hayal etsem de, tersine ulaşıp ulaşamayacağımı görmek isterdim.

gibi hissediyorum sed bu iş için doğru araçtır, ancak toplu metin dosyası düzenlemelerinde uzman değilim. Herhangi bir yardım?

Yanıtlar:


7

Kullanılacak komut:

 sed '/LogMsg/ s?^?//?' filename  new_filename

Dosyadaki satırları bulur dosya adı içeren LogMsg , satırın başındaki (ve ^ ), çift eğik çizgi. Soru işareti, değiştirilecek metinle karışıklığı önlemek için, normal eğik çizgi yerine sınırlayıcı olarak kullanılır. Çıktı, standart çıktı yerine dosyanın yeni sürümüne yönlendirilir.


Çok teşekkürler. Bu özlü ve doğruydu. LogMsg () ile bir satırda meydana gelirlerse, yorum kesikliklerini basitçe silmek için benzer bir komut var mı?
musasabi

s? s 'nin zıttı mı?
musasabi

@ musasabi Hayır. Soru işareti sadece bir ayırıcıdır. S ile başlayan string, // ile hiçbir şey yapmamak anlamına gelir. ? Dizenin değiştirileceği yeri ve yerini değiştirmeyi, başlayıp biteceğini belirler. Ve evet, daha iyi bir tam tersi (yukarıdakileri unut: sed 'LogMsg / s? ^ //? ^?' Dosyaadı> gt; new_filename. Şapka ^ satırın başlangıcını belirtir, dolar işareti $ satırın sonunu gösterir.
MariusMatutiae
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.