2015-12-14 2 views
-1

Я пытаюсь заменить строку прокомментированного текста в файле ничем, используя perl. Как это:Замена длинного пробела на perl

## Some text               ## 

Я попробовал эту команду:

perl -p -i -e 's/## Some text               ##//g' file.php 

Но это не сработало. Есть ли способ сделать это с пустыми пространствами, которые так долго?

+0

's/## Some text \ s ##/g' – kchoose2

+2

Это недействительный' s /// ', потому что нет никакой замены. Кроме того, '\ s' - это только один символ пробела. Вам нужно будет сделать 's/## Some text \ s * ## // g'. –

+0

@ AndyLester - Спасибо за исправление. – kchoose2

ответ

1

Если вы хотите, чтобы держать линию, но удалить текст:

$ perl -pi -e 's/## Some text\s+##//' 

Если вы хотите, чтобы полностью удалить строку:

$ perl -ni -e 'print unless /## Some text\s+##/' 
1

Если вы хотите, чтобы удалить все строки, которые только комментарии и комментарии создаются с ведущим символом #, тогда все, что вам нужно сделать, это:

perl -i -ne 'print unless (m/^\s*#/);' file_name 

m соответствует нам эс^(начало строки) \ S * (ноль или более пробелов)

Если с другой стороны, вы хотите, чтобы удалить эту конкретную строку, а затем использовать -n вместо -p так:

perl -i -ne 'print unless (m//## Some text               #/);' file_name 

Причина, по которой ваш код не работает, заключается в том, что параметр -p всегда будет давать вам печать. Тип:

perldoc perlrequick 

и

perldoc perlretut 

для получения дополнительной информации по рег. выражения. Тип:

для получения дополнительной информации о вариантах -n и -p.

Смежные вопросы