Я пытаюсь удалить первый комментарий в стиле C (только первый) из коллекции исходных файлов Java. Сначала я попробовал многострочный sed, но это не сработало должным образом, поэтому после некоторого поиска в Google мне показалось, что Perl был подходящим вариантом. Раньше мне нравился Perl, это был первый язык, на котором я когда-либо делал веб-программу, но я наткнулся на стену, пытаясь заставить этот скрипт работать:
#!/usr/bin/perl -i.bak
$s=join("",<>);
$s=~ s/("(\\\\|\\"|[^"])*")|(\/\*([^*]|\*(?=[^\/]))*\*\/)|(\/\/.*)/$1 /;
print $s;
Я называю это именем файла (ов) файлов, которые нужно обработать, например, ./com.pl test.java. Согласно всему, что есть в Интернете, -i (редактирование на месте) должно перенаправлять вывод из операторов print в файл вместо печати в stdout. Теперь вот вещь: это не так. Независимо от того, что я пытаюсь, я не могу заставить его заменить файл выводом на печать. Я тоже пробовал $ ^ I, но это тоже не работает.
Не знаю, актуально ли это, но я нахожусь на Ubuntu 11.04.
P.S. Я знаю о подводных камнях регулярного выражения исходного кода:)