2011-08-02 2 views
-1

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

$/= '#';

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

#dddddddddd 
    ccccccccccc 
    eeeeeeeeeee 
    fffffffffff 

Я хотел бы, чтобы удалить знак # и сохранить текст, например: Это не кажется

dddddddddd 
    ccccccccccc 
    eeeeeeeeeee 
    fffffffffff 
+1

Покажите нам больше о том, что вы делаете или хотите сделать с помощью массива? – ysth

ответ

2

Если вы просто хотите, чтобы манипулировать текстовый файл, один вкладыш кажется лучшим решением. Это отредактирует файл и сохранит резервную копию в «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

быть связаны с массивами. Кажется, вы просто имеете дело со строками.

Это удаляет ведущий знак хэш строки $line:

$line =~ s/^\#//; 
+0

Почему обратная косая черта? '#' не является метасимволом. – Zaid

+1

Я не мог вспомнить, было ли это так. Когда я сомневаюсь, я убегаю. –

+0

Возможно, вы захотите использовать скобки '[]' для «escaping» как привычки, так как в ряде вариантов регулярных выражений вы обратный слэш, чтобы включить специальный характер. И в этом случае у вас есть небольшая причина быть осторожным, '#' является специальным в ('s /// x') расширенном режиме регулярного выражения. – Mark

2

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

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

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

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

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


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

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

print $array[0]; # 'dddddddddd' 
+0

Я забыл упомянуть, что разделитель входных записей ($ /) установлен в $/= '#'; потому что это позволило бы мне читать в datarecord. – jbs

+0

@jbs Возможно, вам стоит добавить такую ​​важную информацию к вопросу. – TLP

+0

Спасибо TLP, я обновил вопрос, чтобы включить. Я установил разделитель входных данных в $/= '#'; – jbs

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