regex
  • sed
  • grep
  • wildcard
  • string-substitution
  • 2011-06-06 34 views 5 likes 
    5

    Joker karakter tabanlı bir değişiklik yapmak istiyorum. Örneğin, tüm "kullanım hakkı" nı "elden çıkarma" olarak değiştirin, ancak "tenure" kelimesi bir '=' işaretinden sonra gelirse. Temelde regex ben bunun için var bu =.*tenuresed joker karakterizasyonu

    sed komutu eşleşir geçerli:

    sed 's/=.*tenure/=.*disposition/g' file.txt 
    

    Ancak, ben içeren bir dosyaya bu geçirirseniz: Ben olsun

    blah blah blah = change "tenure" to "disposition" 
    

    blah blah blah =.*disposition" to "disposition" 
    

    yerine:

    blah blah blah = change "disposition" to "disposition" 
    

    Değiştirme işlemini, normal ifadedeki joker karakterin hedef dosyanın bir parçası olmayacak şekilde nasıl yaparım?

    cevap

    6

    Sen Eşittir işareti arasında görünen metin ve "görev süresi" yakalamak için yakalama grubunu kullanmak gerekir.

    Yani

    sed 's/=\(.*\)tenure/=\1disposition/g' 
    

    Not \1 kullanımı başvuru ve yakalanan grup kullanmak.

    Yani

    echo 'blah blah blah = change "tenure" to "disposition"' | sed 's/=\(.*\)tenure/=\1disposition/g' 
    

    biz

    blah blah blah = change "disposition" to "disposition". 
    

    Regex grouping Bkz olsun.

    2
    sed 's/\(=.*\)tenure/\1disposition/g' file.txt 
    
    2

    Sen çıktı eklemek için = ve tenure arasında eşleşti karakterleri kaydetmek gerekir: Dosyayı düzenlemek istiyorsanız Ayrıca

    sed 's/=(.*)tenure/=\1disposition/g' file.txt 
    

    , sen sed -i seçeneği eklemek gerekir inplace (dosyanın kendi yaptığı değişiklikleri yapın).

    2

    backreference 'u sed içinde kullanmalısınız. Bu şekilde kullanın:

    sed 's/\(=.*\)tenure/\1disposition/g' 
    

     İlgili konular

    • İlgili sorun yok^_^