2012-01-11 16 views
61

Ben bunların yerine istiyoruz çizgilerinBütün satır sed ile nasıl değiştirilir?

Şimdi
aaa=bbb

ile bir dosya var varsayalım:

aaa=xxx

ben şöyle yapabilirsiniz:

sed "s/aaa=bbb/aaa=xxx/g"

Şimdi bir var aşağıdaki gibi birkaç satıra sahiptir:

aaa=bbb 
aaa=ccc 
aaa=ddd 
aaa=[something else]

tüm aaa=[something]aaa=xxxsed kullanarak nasıl değiştirebilirim?

+1

"Başka bir şey var mı?" Yazınsal metin mi, yoksa sadece bir yer tutucu mu? Eşit işaretinden sonraki şeyin olası formatı nedir? – ean5533

cevap

111

bu deneyin: Bunun gibi

sed "s/aaa=.*/aaa=xxx/g" 
+2

'g 'ne için? –

+2

Alışkanlık kuvveti, bu durumda göz ardı edilebilir - her maçın yerine sadece birincinin yerine geçmek için genel bir yedek olarak kullanılır. Bu durumda sadece ilk ikincisi nedeniyle eşleşecektir. –

+0

Michael J. Barber, 'g' tüm regexp örneklerini yerine yenisiyle değiştir –

33

: Eğer aaa= satırın başında olduğunu garanti istiyorsanız

sed 's/aaa=.*/aaa=xxx/' 

, bunu yapmak:

sed 's/^aaa=.*/aaa=xxx/' 
2

awk'u kullanmak isterseniz, o zaman bu da

awk -F= '{$2="xxx";print}' OFS="\=" filename 
1

Bu sizin için işe yarayabilecek:

cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/' 
> aaa=bbb 
> aaa=ccc 
> aaa=ddd 
> aaa=[something else] 
! 
aaa=bbb 
aaa=ccc 
aaa=ddd 
aaa=xxx 
+0

'bbb',' ccc' ve 'ddd' için açık bir kontrolün OP’nin aklında ne olduğunu tam olarak bilmiyorum. – spinup

2
sed -i.bak 's/\(aaa=\).*/\1"xxx"/g' your_file 
57

Ayrıca başarmak için en sed değişiklik satırını kullanabilirsiniz bu:

sed -i "/aaa=/c\aaa=xxx" your_file_here 

Bu geçmesi ve geçen herhangi hatları bulacaksınız aaa= testinin anlamı, hattın aaa= harflerini içermesidir. Daha sonra tüm satırı aaa = xxx ile değiştirir. Testin başına ^ kodunu ekleyerek yalnızca aaa= ile başlayan satırları aldığınızdan emin olabilirsiniz, ancak bu size kalmış.

+2

OS X'in "sed", bir ters eğik çizgi ve bir satır sonu tarafından takip edilmesini gerektirir ve eklenen metne yeni bir satır eklemez, ancak örneğin '$'/aaa =/c \\\ NAAA xxx \ n'' =. – user495470

+1

OSX sed'de bir hata gibi görünüyor bana ... –

+2

OSX BSD sed kullanıyor –

İlgili konular