как сдвиг на основе регулярного выражения с использованием Perl? - PullRequest
0 голосов
/ 02 августа 2011

как сдвинуть верхний элемент из массива на основе регулярного выражения с использованием perl? Также это записи данных, что означает, что у меня установлен разделитель входных записей ($ /) на

$ / = '#';

например, следующий текстовый файл содержит эту запись данных.

    #dddddddddd
    ccccccccccc
    eeeeeeeeeee
    fffffffffff

Я хотел бы убрать знак # и оставить текст, например:

    dddddddddd
    ccccccccccc
    eeeeeeeeeee
    fffffffffff

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Не путайте shift с подстановкой регулярных выражений.

shift удалит первый элемент из массива , а не строки.

Подстановка регулярного выражения может иметь дело с удалением ведущего символа '#'.

Первым элементом массива будет $array[0].

Если к этому подстановке применяется регулярное выражениепервый элемент, '#' удаляется:


my @array = ( '#dddddddddd', 'ccccccccccc', 'eeeeeeeeeee', 'fffffffffff' );

$array[0] =~ s/^#//;

print $array[0];  # 'dddddddddd'
2 голосов
/ 02 августа 2011

Если вы просто хотите манипулировать текстовым файлом, однострочник кажется лучшим решением. Это отредактирует файл и сохранит резервную копию в «inputfile.txt.bak».

perl -pi.bak -we 's/^#//' inputfile.txt

Или вы можете сделать перенаправление оболочки:

perl -wpe 's/^#//' inputfile.txt > outputfile.txt

Они попытаются изменить все строки в файле. Если вы просто хотите изменить первую строку, вам нужно что-то другое:

perl -wpe 's/^#// if ($. == 0);' inputfile.txt > outputfile.txt
0 голосов
/ 02 августа 2011

Похоже, это не связано с массивами. Похоже, вы просто имеете дело со строками.

При этом удаляется начальная хеш-метка для строки $line:

$line =~ s/^\#//;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...