Perl Regular Expressions + удалить строку, если она начинается с # - PullRequest
2 голосов
/ 07 ноября 2010

Как удалить строки, если они начинаются с символа "#", используя регулярные выражения Perl?

Например (необходимо удалить следующие примеры)

line="#a"
line="     #a"
line="# a"
line="    # a"

...

требуемый синтаксис

   $line =~ s/......../..

или пропустить цикл, если строка начинается с "#"

из моего кода:

open my $IN  ,'<', $file      or die "can't open '$file'  for reading: $!";
while( defined( $line = <$IN> ) ){

.
.
.

Ответы [ 4 ]

12 голосов
/ 07 ноября 2010

Вы не удаляете строки с s///. (В цикле вы, вероятно, хотите next;)

В опубликованном вами фрагменте это будет:

while (my $line = <IN>) {
    if ($line =~ /^\s*#/) { next; }
    # will skip the rest of the code if a line matches

    ...
}

Возможны более короткие формы /^\s*#/ and next; и next if /^\s*#/;.


perldoc perlre

/^\s*#/
  • ^ - «начало строки»
  • \s - "символ пробела"
  • * - «0 или более раз»
  • # - просто #
4 голосов
/ 04 декабря 2013

Исходя из Ответ Аристотеля Пагальциса Вы могли бы сделать:

perl -ni.bak -e'print unless m/^\s*#/' deletelines.txt

Здесь ключ -n заставляет perl помещать цикл вокруг предоставленного вами кода. который будет читать все файлы, которые вы передаете в командной строке последовательность. Ключ -i (для «на месте») говорит, чтобы собрать вывод из вашего скрипта и перезаписать оригинальное содержимое каждого файла Это. Параметр .bak для опции -i указывает Perl сохранять резервную копию исходный файл в файле, названном в честь оригинального имени файла с .bak добавлен. Для всех этих битов смотрите perldoc perlrun.

deletelines.txt (изначально):

#a
b
     #a 
#   a
  c
         # a

становится:

b
  c
2 голосов
/ 07 ноября 2010

Программа (вырезать и вставить все, включая раздел DATA, настроить строку shebang, запустить)

#!/usr/bin/perl
use strict;
use warnings;

while(<DATA>) {
  next if /^\s*#/;  # skip comments
  print;            # process data
}

__DATA__
# comment
data
  # another comment
more data

Вывод

data
more data
0 голосов
/ 02 февраля 2017
$text ~= /^\s*#.*\n//g

Это удалит все строки с # во всем файле $ text, не требуя, чтобы вы просматривали каждую строку текста вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...