Potrzebuję wyciąć kawałek kodu z wszystkich plików w danym katalogu (pozostałość po ataku). Sęk w tym że jest on tak niewygodny, że muszę złapać kilka linii aby nie wywalić czegoś istotnego.
To jest mniej więcej taki format tekstu
if (blablabla) {
blabla.bla(bla);
} else {
blablablabla;
}
Natłukłem się tych poleceń w konsoli. Ale poprzednie problemy rozwiązywałem zdaje się:
find . -type f -name "*.js" -print0 | xargs -0 sed...
No ale z tymi kilkoma liniami to zupełnie mi nie wychodzi w sed. Patrzyłem ale nie mam komendy pearl na tym serwerze. Czy ktoś mógłby podpowiedzieć jak to ogarnąć?
Taki przyklad zrobilem
$ cat wzorzec | sed ':a;N;$!ba;s/\n/wungiel123/g' | sed 's/wungiel123/\n/g'
if (blablabla) {
blabla.bla(bla);
} else {
blablablabla;
}
Ma on za zadanie zastapic nowe linie slowem aby wzorzec byl w jednej linii.
( Oczywiscie drugi sed mial za zadanie prywrocic strukture pliku do poprzedniego stanu )
Jesli tekst bedzie w jednej linii to mozna uzyc sed.
Pewnie da sie bezposrednio, ale ja nie potrafie narazie.
#!/bin/bash
LISTA_PLIKOW=$(find . -type f -name "*.js")
# $ grep -rin -A4 "if (.*) {" *.js
# $ cat wzorzec | sed ':a;N;$!ba;s/\n/wungiel123/g' | sed 's/wungiel123/\n/g'
WZORZEC2=$(cat wzorzec | sed ':a;N;$!ba;s/\n/wungiel123/g')
## https://stackoverflow.com/questions/1251999/how-can-i-replace-a-newline-n-using-sed
#echo $WZORZEC2
for K in ${LISTA_PLIKOW}; do
#cat ${K} | sed ':a;N;$!ba;s/\n/wungiel123/g' | sed "s/$WZORZEC2//g" | sed 's/wungiel123/\n/g'
sed -i -e ':a;N;$!ba;s/\n/wungiel123/g' -e "s/$WZORZEC2//g" -e 's/wungiel123/\n/g' ${K}
done
Skrypt mozesz zastosowac tylko na kopii do testowania.
To już inne techniki wykorzystuję do namierzania tych wstawek.
Nie da sie, musisz przeczytac i sprawdzic kod od zera do deski.
To moze byc nawet tylko jeden znak "=" przy porownaniu lub inny dajacy dodatkowe uprawnienia.
Teoretycznie nawet data powstania pliku jest cyfrowym zapisem i moze byc sfalszowana.
Ale oczywiscie probowac mozesz.