2013-06-21 2 views
1

Я хотел заменить /**/ на все файлы в папке. Я пробовал:Заменить/**/в Unix с пустым пространством

perl -pi -w -e 's/\/**\///g;' *.java 

Но получил ошибку: Nested quantifiers in regex; marked by <-- HERE in m//** <-- HERE // at -e line 1.

То же самое с:

sed 's/\/**\///g;' 

Мне нужно заменить в основном /**/ с пустым пространством.

+0

Эта запись 'perlfaq6' на [как снять комментарии в стиле C] (http://search.cpan.org/~dapm/perl-5.14.4/pod/perlfaq6.pod#How_do_I_use_a_regular_expression_to_strip_C-style_comments_from_a_file?) Может Полезно – mvp

ответ

9

Вам также нужно избегать звездочек. Для того, чтобы сохранить читаемость, вы можете использовать другие разделители, а также:

sed "s#/\*\*/##g" 
+0

Я думаю, у вас есть 1 дополнительный '|' – anubhava

+0

@anubhava: Да, спасибо. – Blender

+0

Я бы даже не предложил первую версию - трудно читать «пильный диск». Btw Мне нравятся запятые или хеши как разделители, когда не используются косые черты – Bohemian

1

Вы можете указать * в []:

perl -pi -w -e 's#/[*]{2}/# #g;' *.java 

В качестве альтернативы, вы можете использовать quotemeta оператора:

perl -pi -w -e 's#\Q/**/\Q# #g;' *.java 

, который избегает всех символов ASCII, не соответствующих /[A-Za-z_0-9]/.