Bütün bir satırı sed ile nasıl değiştirebilirim?


132

Satırları olan bir dosyam olduğunu varsayalım

aaa = bbb

Şimdi bunları şu şekilde değiştirmek istiyorum:

aaa = xxx

Bunu şu şekilde yapabilirim:

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

Şimdi aşağıdaki gibi birkaç satırlık bir dosyam var:

aaa = bbb
aaa = ccc
aaa = ddd
aaa = [başka bir şey]

Nasıl değiştirebilirsiniz tüm bu satırları aaa=[something]ile aaa=xxxkullanarak sed ?


2
[something else]Gerçek metin mi yoksa bu sadece bir yer tutucu mu? Eşittir işaretinden sonraki şeyin olası biçimi nedir?
ean5533

bu daha çok normal ifade sorusudur, sed sorusu değil.
2018

Yanıtlar:


217

Bunu dene:

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

4
Alışkanlık gücü, bu durumda göz ardı edilebilir - sadece birinciden ziyade her bir eşleşmenin yerini alacak olan hattın küresel bir ikamesi olarak kullanılır. Bu durumda, ancak yalnızca ilk eşleşecektir çünkü .*.
John Doyle

1
Michael J. Barber, gtüm regexp örneğini değiştirmeyle değiştirin
A-IV

116

Bunu başarmak için sed'in değişim satırını da kullanabilirsiniz:

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

Bu, aaa=testi geçen herhangi bir satırı bulacak ve bu, satırın harfleri içerdiği anlamına gelir aaa=. Sonra tüm satırı aaa = xxx ile değiştirir. Yalnızca ^ile başlayan satırları aldığınızdan emin olmak için testin başına bir ekleyebilirsiniz , aaa=ancak bu size bağlıdır.


12
OS X en sedgerektiren cbir ters eğik çizgi ve sonrasında bir yeni satır edilecek ve bu eklenen metine bir yeni satır eklemek değildir, ancak örneğin kullanabilirsiniz $'/aaa=/c\\\naaa=xxx\n'.
Lri

İşte ve @Mr'nin değiştir / değiştir özelliğinin sed dokümantasyonundaki örneği. T hakkında konuşuyor.
gene_wood

Bu aslında (Ama LRI versiyonu taşınabilirlik için tabi) ... isteneni yapıyor en yakın
Gert van Berg den

42

Bunun gibi:

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

aaa=Satırın başında olmasını garanti etmek istiyorsanız , şunu yapın:

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

1
Ya aaa = 'xxxx' ile değiştirmek istersem. sed 's/aaa=.*/aaa=\'xxx\'/'>
Kaçmayı

2

Kullanmak isterseniz awkbu da işe yarar

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

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

0

Bu sizin için işe yarayabilir:

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

Ben için açık çek sanmıyorum bbb, cccve dddOP aklında oldukça şeydir.
2016
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.