Saya perlu mengedit file seperti berikut:
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
iface wlx000 inet6 auto
post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2
auto wlx000
tujuannya adalah untuk menghapus baris yang dimulai dengan 'iface ... inet6' dan juga menghapus beberapa yang dimulai dengan spasi (bisa tidak ada atau lebih dari satu):
iface wlx000 inet6 auto
post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2
dan jaga sisanya untuk hasil berikut:
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
auto wlx000
Saya mencoba dengan sed menggunakan sebagai berikut:
sed -i.old -r -e "/iface\s*\w*\s*inet6.*/,\${d;/^\s.*/d;}" /etc/configfile
tetapi menghapus semuanya mulai dari tempat yang tepat tetapi terhapus sampai akhir. Saya hanya ingin menghapus garis menatap spasi setelah teks iface pilih.
text-processing
awk
sed
fcm
sumber
sumber
Jawaban:
Coba adaptasi
sed
one liner Anda ini:Ini cocok dengan rentang dari pola pertama Anda ke baris pertama TIDAK dimulai dengan spasi, dan menghapus garis dimulai dengan spasi atau "i" (untuk yang memimpin
iface
). Perlu memikirkan kembali harusi
diminta setelah blok.Sepertinya ini berfungsi:
Mohon coba dan laporkan kembali.
sumber
Script untuk standar
sed
yang menggunakan loop eksplisit untuk menghapus baris:Script menemukan
inet6
garis dan kemudian menambahkan baris berikutnya ke garis itu secara internal dalam ruang pola (dengan karakter baris baru yang disematkan di antara). Itu kemudian menghapus ruang pola hingga dan termasuk karakter baris baru pertama (ini menghapusinet6
garis asli ). Ini terus melakukan ini sampai ruang pola tidak dimulai dengan karakter kosong (spasi atau tab).Pengujian:
Pengujian pada data buatan:
Script sebagai "satu baris":
sumber
Anda sudah mendapatkan jawaban yang baik untuk
sed
alat, tetapi izinkan saya mengusulkan yang lain, saya percaya pendekatan yang lebih sederhana, menggunakanpcregrep
:Regex harus jelas - kami mencari pola mulai dari baris
^iface.*inet6
dan kemudian kelompok karakter ATAU baris baru diikuti oleh spasi tunggal yang diulang nol atau lebih banyak kali. Maka kita hanya perlu menginstruksikanpcregrep
untuk memungkinkan pencocokan multi-linear dengan-M
opsi dan membalikkan semuanya dengan-v
(bagian yang cocok akan dihapus).sumber
pcregrep
, jauh lebih intuitif.