Wpis z mikrobloga

#regex #programowanie
Zagadka regexowa
Plik(i) w ktorych mamy wiele wystapien pewnego strina o przykladowym formacie

ayy\n(lmao\d\n)+

czyli przykladowo

ayy
lmao1
lmao2
lmao3

chcemy zamienic na

ayy
ehh(lmao\d)
ehh(lmao\d)
ehh(lmao\d)

ilosc powtorzen linii lmao\d jest nieznana, ale dodatnia
ayy musi koniecznie byc pierwsza linia

Ktos wie jaki regex zlapie i zamieni taki string?
  • 10
  • Odpowiedz
via Android
  • 0
@alien3211
@pingwindyktator
W pythonie to nie problem (tak to ostatecznie rozwiązałem). Raczej byłem ciekawy czy w ogóle da się to zastąpić sedem.

sed 's/\(lmao\d\)/ehh(\1)/'


To niestety zamieni każdą linie lmao, a mi zależy konkretnie na tych które są poprzedzone linia ayy( n linii lmao bezpośrednio po jednej linii ayy).
  • Odpowiedz
poczytaj trochę o lookahead/Lookbehind w regexach. one działają podobnie jak if.
ewentualnie wykorzystaj awk, perl, ostatecznie basha czyli połączenie wszystkiego jeśli nie chcesz perla :)
w sed można tworzyć zmienne i łączyć wyszukiwania. polecam do seda, awk, regex, etc
do testowania polecam stronę regex101.com - ma fajny debuger regexow + fajnie rozwija składnie danego regexa
  • Odpowiedz