Извлеките число, которое присваивается строке, используя скрипт Perl

У меня есть файл input.txt, в котором есть несколько строк, и каждой строке присваиваются некоторые значения.

Моя задача - написать Perl-скрипт для извлечения числа, присваиваемого любой из строк.

Например, учитывая это input.txt

Tom=0×1234,Bob=0x4567,rock=0x8912.

я должен извлечь значение, которое присваивается rock.

Мне нужна помощь в написании сценария для этого.

3
задан 20 December 2017 в 19:29

3 ответа

Один вариант на @terdon - для каждого /rock=(...)/, скажем:

perl -nE 'say for /rock=(\w+)/'

и решение с grep

grep -Po 'rock=\K\w+' file
5
ответ дан 20 December 2017 в 19:29

Вот один из способов:

$ perl -lne  '/rock=([^.,]+)/ && print $1' file
0x8912

/rock=([^.]+)/ будет соответствовать строке rock= и затем захватывать самый длинный отрезок одного или нескольких не . символов ([^.]+). Скобки "фиксируют" совпадение и делают его доступным как $1. Если это соответствует, печатается $1.

-l удаляет завершающие новые строки из каждой входной строки и добавляет новую строку к каждому вызову print. -n говорит perl читать строку входного файла построчно и применять скрипт, заданный -e, к каждой строке.

3
ответ дан 20 December 2017 в 19:29

Что-то вроде этого

echo Tom=0×1234,Bob=0x4567,rock=0x8912 | perl -E'while(<<>>){print map$_->[1],grep$_->[0]=~/rock/,[split/=/]for split/,/,$_}';

Это компилирует с warnings и использует новое <<>> таким образом, это - действительно хороший код жемчуга.

-3
ответ дан 20 December 2017 в 19:29

Другие вопросы по тегам:

Похожие вопросы: