Sziasztok!
Init szkriptben kéne megkeressek egy több soros előfordulást, és közé kellene beszúrnom még egy plusz sort. Sajnos a sed az nem használható önmagában erre, mert az ugyebár egyszerre csak 1 sort tud feldolgozni (javítsatok ki ha tévednék).
Nekem meg ilyesmi patternt kéne megkeresnem:
iptables -N OUTS -d $NET_ADDR -j ACCEPT
}
}
Majd pedig az iptables kezdetű sor után, a két utolsó kapcsos zárójel elé, be kéne szúrnom még egy plusz sort.
A másik probléma az, hogy ezt OpenWRT-t futtató routereken kéne megtegyem. Pulsz csomag feltelepítése kizárt (egyéb okokból), a rendelkezésre álló előre feltelepített parancsok az alábbiak:
sh
grep
sed
awk
Tehát ezek valamelyikével, vagy ezek kombinációjával kéne megoldani. Az AWK mintha tudna több sorral is dolgozni valamilyen trükkös módon, de nekem nem sikerült megtalálnom sehol sem, hogy hogyan.
Tudna valaki segíteni?
Hozzászólások
Nézd meg az awk "next" illetve "getline" utasításait.
Pl. valami ilyesmi simán megy (nem vagyok biztos a szintaxisban, az elv a lényeg: ha találsz megfelelő sort, akkor mész a következőre...):
if ($0 ~ /iptables/) {
VALTOZO=1
next
}
if (VALTOZO == 1) and ($0 ~ '}') {
print $0
print UJSOR
VALTOZO=0
}
vagy a getline verzió:
if ($0 ~ /iptables/) {
getline
if ($0 ~ '}') {
print $0
print UJSOR
}
}
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
Köszi az infót, megnézem. De a file nem ér véget a két darab szögletes zárójellel, hanem folytatódik. Nekem az utánna következő dolgok is kellenek. Csak beszúrnom kéne egy plusz sort a megfelelő helyre.
Mivel minden sort feldolgoz az awk, ezért csak kell egy print $0 még valahova (else ág, vagy új if{} az első példában, illetve a második példánál kell egy next még a belső if-be, és a végére a print $0).
(Meg most látom, hogy minkét példában az első if-nél kimaradt egy-egy print $0)
Persze lehet, hogy az egész még finomításra szorul, mert valahol valami szemantikai hiba van. :)
----------------------------
"Még jó, hogy nem szeretem a finomfőzeléket. Mert ha szeretném, meg kellene ennem. Pedig nem szeretem."
> egyszerre csak 1 sort tud feldolgozni
"Sed has the ability to look at more than one line in the pattern space. This allows you to match patterns that extend over multiple lines."
http://docstore.mik.ua/orelly/unix/sedawk/ch06_01.htm#SEDAWK-CH-6-SECT-1
A sed tud több sort is kezelni: http://www.grymoire.com/Unix/Sed.html#uh-51
Egy lehetséges megoldás:
sed '
/iptables*/ {
N
N
P
D
}
/\}\n\}/i\
uj sor
' input_file
Király! Ez tökéletesen azt csinálja, amit szerettem volna. Köszönöm!!! Mindenkinek.
Örülök, különösen, hogy ez volt az első hozzászólásom a HUP-on...