Dosyadaki satırı sed ile desenle nasıl değiştirebilirim?


28

Sed ile ilgili çok fazla belge okuyorum ve hala özel kullanım durumumda zorlanıyorum.

Bu satırı bir conf dosyasında kendi satırımla değiştirmek istiyorum:

Bu satırı değiştirin:

#maxmemory <bayt>
ile:
maksimum bellek 26gb

Ben denedim:

sed s / maxmemory. * bayt. * / maxmemory 26gb / /etc/redis/redis.conf

Hatayı alıyorum:

sed: -e ifade # 1, karakter 30: sonlandırılmamış `s 'komutu

Bu beni çok üzüyor çünkü bunun ne anlama geldiğini bilmiyorum. Benim sorum şu:

İstediğimi nasıl başarabilirim? Bu hata ne anlama geliyor? (böylece ondan öğrenebilirim)

Yanıtlar:



11

Aslında

Hata, tırnak işareti olmadığında, kabuğunuzun bağımsız değişkenleri ayırmak için boşluk kullandığını gösterir. Arasındaki boşluk maxmemoryve 26gbböylece bu şekilde bir terminali olmayan ilk argüman, sonlandırma olarak kabul edilir /zaman sedkendi komutları olarak bu argüman ayrıştırmak için gelir.

Normal ifadenizi tek tırnak işaretleri arasına koymak, böylece kabuğunuz bunu birden çok bağımsız değişkene ayırmaz ve sedtek bir bağımsız değişken olarak verir, sorunu çözer:

$ sed s/maxmemory.*/maxmemory 26gb/ /some/file/some/where.txt
sed: -e expression n°1, caractère 23: commande `s' inachevée

süre

$ sed 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt

İşler.

Umarım yardımcı olur.


1
Bunu sedyapmaz. Bunu yapan kabuk .
JdeBP

haklısın, elbette, kafa kafaları için teşekkürler :)
Sxilderik

3

Kullanım durumunuz bu komutla çözülecektir.

sed -i -e 's/#maxmemory.*/maxmemory 26gb/g' /etc/redis/redis.conf

5
Belki küçük bir açıklama eklemek istersiniz.
davidbaumann

2
-e benim durumumda MacOS için gerekli
cancerbero
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.