2011-12-22 17 views
11

Başlık, hepsinin adını yazıyor. Bilmediğim bir özellik değerini başka bir değere değiştirmem gerekiyor. ben bu çalışıyorum:Özellik dosyasındaki özellik değerini bir kabuk dosyasından düzenleyin

#!/bin/bash 
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties 

i Sorunun $newvalue sed haberci yukarıya böylece bir dizin temsil eden bir dize olduğunu düşünüyorum sed: -e expression #1, char 19: unknown option to s'`

olsun.

Ne yapabilirim?

+3

'/' sadece 'sed' için olağan (ama zorunlu değil) ayırıcı olduğunu. Boru ('|') gibi başka bir şey denerseniz ne olur? –

+0

@DanFego çalıştı! var dizimdeki '/' nin problem olduğunu anladım. sedimiteri değiştirebileceğinizi unuttu. Teşekkürler – Michael

+1

Neden 'g' değiştiricisini kullanıyorsunuz? Bazı seds için – fge

cevap

7

sed/ en yaygın olmasına rağmen, ayırıcı olarak / dışındaki karakterleri kullanabilirsiniz. Yol adları gibi şeylerle uğraşırken, bunun yerine boru (|) gibi bir şey kullanmak genellikle yararlı olur.

+0

, 's \ | srch | repl |' gibi standart olmayan bir reg-ex sınırlayıcı ilk örneğini 'kaçış' gerekir. Hepinize iyi şanslar. – shellter

7

mülk dosyasının nasıl = işaretiyle ayrılmış ise -

param1=value1 
param2=value2 
param3=value3 

o zaman sadece param adını bilerek param değerini modifiy yok awk kullanabilirsiniz. biz özellik dosyasında param2 değişiklik yapmak istiyorsanız Örneğin, biz aşağıdakileri yapabilirsiniz -
awk -F"=" '/param2/{$2="new value";print;next}1' filename > newfile 

Şimdi, yukarıdaki one-linersert kod param yeni değer gerektirir

. Bir kabuk senaryosunda kullanıyorsanız ve bir değişkenden yeni bir değer almanız gerekiyorsa bu durum söz konusu olmayabilir. Bu durumda

, aşağıdakileri yapabilirsiniz - Bu ise

awk -F"=" -v newval="$var" '/param2/{$2=newval;print;next}1' filename > newfile 

biz awk değişken newval oluşturmak ve komut değişkeni yeni parametre değeri içeren ($ var) ile başlatmak.

+0

Özellik yoksa, yeni bir satır eklemek istersem ne olur? –

+0

Belirtilen 'awk' komutunu denedim ama' = 'çıktıyı çıkarır, bu nedenle HOSTNAME = oldvalue' ile' HOSTNAME newvalue' arasında dönüştürme işlemi biter - herhangi bir fikrim yanlış mı? –

+1

@Sadece OFS değişkenini ayarlamanız gerekecek. Yani awk -F '=' -v OFS = '=' ... –

0

Kongchen adında birinden bir işlev buldum. O özellik değerlerini değiştirmek için bir fonksiyon senaryoyu yazdım ve bu benim için iyi çalıştı:

kontrol edin: https://gist.github.com/kongchen/6748525

İlgili konular