Polecenie „rpl” w systemie Linux nie zastępuje tekstu

-1

używam rpl program w Linuksie do zastąpienia date( z pdate( w niektórych plikach.
Ale to mówi A Total of 0 matches replaced in 1 file searched.
while wyjście grep dla date( jest:

ariyan@ariyan-laptop:/var/www/moodle21$ grep -wR 'date(' admin/uploaduser.php
$today = make_timestamp(date('Y', $today), date('m', $today), date('d', $today), 0, 0, 0);

używam rpl jak to:

rpl -wR 'date(' 'pdate(' admin/uploaduser.php

Jaki jest problem?

RYN
źródło
czy to się psuje na wszystkich plikach w tym katalogu lub tylko na tym? może uprawnienia?
RobotHumans
@ aking1012: Wszystkie pliki. Wszystkie uprawnienia to 777!
RYN

Odpowiedzi:

3

Nigdy wcześniej nie korzystałem z tego narzędzia, ale patrząc na opis tego, co „-w”, domyślam się, że obsługuje granice słów nieco inne niż oczekiwano. Jeśli wyłączysz „-w”, powinno działać. Dodatkowo, w przykładzie podałeś jeden plik do dopasowania, więc -R też nie wejdzie do gry.

Próbować:

rpl 'date(' 'pdate(' admin/uploaduser.php

EDYCJA: Po odrobinie badań odkryłem, że jest zgłoszony błąd dla rpl nie obsługujących interpunkcji jako granic słów, dlatego to nie działa. Więc jedyną opcją jest użycie innego narzędzia. Sed przychodzi na myśl w tym zadaniu, więc możesz to osiągnąć, wykonując następujące czynności:

sed -i 's/\bdate(/pdate(/g' admin/uploaduser.php

W ten sposób zamienisz inline (-i) w taki sam sposób, w jaki zrobiłby to rpl i dopasowuje rzeczy z datą początkową i zastępuje je pdate.

Alex
źródło
ale mam takie stringi usergetdate( lub getdate( i nie chcę, żeby te zostały zastąpione!
RYN
Wygląda na to, że jest błąd z rpl, który nie obsługuje interpunkcji jako granic słów. Udało mi się jednak uruchomić go z następującą instrukcją sed sed -i 's/\bdate/pdate/g'
Alex