[MEGOLDVA]Shell script named.conf szerkesztés

 ( djpety | 2009. július 7., kedd - 1:47 )

Üdv mindenkinek!

A napokban a DNS kezelésének megkönnyítése végett elkezdtem írni egy shell scriptet, amúgy sem vagyok nagy otthon ebben, de eddig viszonylag zökkenő mentesen ment, viszont a törlés rész nem akar sikerül. Már minden hol kerestem megoldást, és annyira jutok hogy megtudom keresni a törlendő rész regexp-el (regexp sem az erősségem)

gawk '/(zone "highszerver.net")/,/};$/' /etc/bind/zones.conf

Ezzel tökéletesen kiválasztom az adott zónához tartozó szöveg részletet, viszont sehogy nem tudom törölni, ebben szeretném a segítségeteket kérni.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A fájlt se ismerem, és az awk-ot se, de ha regexppel megtalálod azt, ait törölni akarsz egy fájlból, akkor sed-del szedd ki:
sed -e 's/regexp//g'
Ha a regexp által megtalált szövegnek csak egy részét kell kiszedni:
sed -e 's/\(elotte\)torlendo\(utana\)/\1\2/g'

Ha jól értelmezem, akkor így kéne kinézni: sed -e 's/\(zone "highszerver.net"\)\(};$\)/\1\2/g'

De így sajnos nem szedi ki a fájlból, úgyanúgy benne van (természetesen utána írtam a fájl elérési útját, és a képernyőre írt kimenetben benne volt).

Szóval az én fájlom a Bind9 DNS szerver zónákat tartalmazó fájlja

Ez a fájl az alább szerint néz ki.


zone "zona1.hu" IN {
type master;
file "/etc/bind/zones/zona1.hu.db";
};

zone "zona2.hu" IN {
type master;
file "/etc/bind/zones/zona2.hu.db";
};

Na most én az első sorban lévő idéző jelek közti szöveggel szeretnék rákeresni és törölni a szövegből.

Remélem így értehető lesz:) És köszi a gyors reakciót!

Egyrészt, amit írtam, ott az "elotte", "utana" részt meghagyja, úgyhogy amit törölni akarsz, azt nem kell zárójelbe tenni. Ebben az esetben mindent, amit a regexp megtalál, törölni kell, úgyhogy egyáltalán nem kell a zárójeles módszer. Továbbá az egész szövegnek illeszkednie kell a regexpre, úgyhogy itt középre kell .* vagy inkább [^}]* (hogy az első }-ig töröljön).

Másrészt itt többsoros részeket kell keresni és törölni, a sed pedig soronként működik. Erre egy ronda workaroundot szoktam használni: tr-rel lecserélem az újsorokat valami olyan karakterre, ami nincs a fájlban, sed-del cserélek, aztán visszacserélem az újsorokat. Pl.:
tr "\n" $ | sed -e 's/zone "highszerver.net"[^}]*};//g' | tr $ "\n"

Valaki biztosan tud normálisabb megoldást: sed-del is lehet bűvészkedni, de valószínűleg awk-ban vagy perl-ben egyszerűen meg lehet csinálni.

En mondjuk rubyban oldottam ezt meg mert a script mast is csinal, de:

require "erb"

class Ntemplate
def initialize(name)
@name = name
end

def get_binding
binding
end
end

file = File.new("/etc/namedb/named.conf.local", "r")
namedconf = file.read
file.close

nconf = %{
zone "<%= @name %>" \{
type master;
file "master/zone_<%= @name %>";
\};
}.gsub(/^ /, '')

nc = Ntemplate.new(domname)
alma = rhtml.result(nc.get_binding)
File.open("/etc/namedb/named.conf.local", 'w+') {|f| f.write(namedconf.to_s.gsub("#{alma}", '')) }

----

Szoval a lenyeg az hogy az egeszet *EGY* stringkent kell kezelni.

Köszi szépen mind kettőtöknek, a sed-el megoldottam (csak még elé írtam cat-el a szöveget) és működik :)

Ruby-t egyáltalán nem ismerem, csak tudom hogy van, így azzal nem akartam kísérletezni.

Tehát köszönöm!

sed '/zone "highszerver.net"/,/};/d'

--
Soli Deo Gloria

Ez még jobb:) köszönöm!

Olyanba tudtok segíteni nekem hogy fájl zárolás?

Hogy véletlenül se írja felül az új fájl ha ne adj isten egyszerre futna le a parancs.

Találtam flock-ot, de nem tudom használni, ugyanúgy tudok menteni fájlt. (biztos hogy nem jól csinálom, de hát kezdő linuxos létemre talán ez elnézhető.)

A válasz(oka)t előre is köszönöm! És az előző válaszokat is köszönöm! Így nem szenvedtem már több napot.

Idézet:
Olyanba tudtok segíteni nekem hogy fájl zárolás?

dotlockfile

ebben tud valaki segíteni?

remélem nem gond, hogy hozzáírtam a címhez, hogy megoldva:) hátha más is erre keres megoldást.

Dehogy gond, sot ez a helyes eljaras. Masik meg a "sokatmondo" cim a topicnak, igy is egyszeruen ra lehet keresni. Imadom a "script help kellene" topicokat, ahol a vegen egy szo nelkul eltunik a kerdezo...

akkor örülök neki:) jó kis közösség ez, gyorsan kaptam segítséget:) erre nem számítottam.