sed dosyadaki satırı bul ve karakterleri kaldır


0

Bunun gibi satırları içeren bir dosyam var

proto udp
.
.
.
..
server 10.10.8.0/24 255.255.255.0

Olmak için bu hat sunucusundan yalnızca / 24'ü kaldırmak için bir yola ihtiyacım var 10.10.8.0/24 255.255.255.0

server 10.10.8.0 255.255.255.0

bu çizginin değişken olduğunu düşünün, ancak tek sabit şey şöyle olabilir / böyle olabilir

server 198.196.178.0/8 255.0.0.0

bu şekilde olabilmek için bu satırdan yalnızca / 8'i kaldıracak bir yola ihtiyacım var

server 198.196.178.0 255.0.0.0

2
sed '/^server/s|/[0-9]*||'İhtiyacınız için yeterli olabilir.
Stéphane Chazelas

Yanıtlar:


0

GNU'yu sedyakalanan gruplarla kullanma :

sed -r 's_^(server\s+([^.]+.){3}[0-9]{1,3})/[0-9]+(.*)_\1\3_' file.txt

Dosyayı yerinde düzenlemek için -iseçeneği kullanın:

sed -ri 's_^(server\s+([^.]+.){3}[0-9]{1,3})/[0-9]+(.*)_\1\3_' file.txt

Örnek:

% sed -r 's_^(server\s+([^.]+.){3}[0-9]{1,3})/[0-9]+(.*)_\1\3_' <<<'server 10.10.8.0/24 255.255.255.0'
server 10.10.8.0 255.255.255.0

% sed -r 's_^(server\s+([^.]+.){3}[0-9]{1,3})/[0-9]+(.*)_\1\3_' <<<'server 198.196.178.0/8 255.0.0.0' 
server 198.196.178.0 255.0.0.0

Bu iş ama bana bash çıktı verir ... dosyada onu değiştirmek gerekir
Khalid Abo El MaGd

@KhalidAboElMaGd Sorun değil, sadece seçeneği kullanın -i... düzenlemelerimi kontrol et ..
heemayl 16:16

@heemayl, önerirken sed -iaklınızda iki şey tutmalı: (1) onlar başlayanlar, stres için olmadan komutu sınamak -ianahtarı ya da tersine çevirmek için zor hasarlara yol açabilir. (2) BSD'nin sedbir -ianahtarı vardır ancak boş bir dize (yani ) olsa bile bir yedekleme uzantısı gerektirir'' . Bu atlandığında, komut yedekleme uzantısı olarak yorumlanır ve onu izleyen dosya adı bir sedkomut olarak ayrıştırılır (genellikle hatalara yol açar). Kötü sürprizlerden kaçınmak ve daha iyi taşınabilirlik için -iher zaman yalnızca olsa bile yedek bir uzantı ekleyin ''.
Wildcard,

@Wildcard adil points..OP zaten olmadan test etti -iben after..check ileri sürmüşlerdir neden bu, o comment ..
heemayl

1
@Wildcard, GNU ile sed, yedekleme uzantısının sıkışıp kalması -igerektiği anlamına gelir -i ''. -i.bakGNU ve BSD'ler arasında taşınabilir, ancak ne -i( ne ile aynı -i'') -i ''.
Stéphane Chazelas
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.