У меня есть файл input.txt
, в котором есть несколько строк, и каждой строке присваиваются некоторые значения.
Моя задача - написать Perl-скрипт для извлечения числа, присваиваемого любой из строк.
Например, учитывая это input.txt
Tom=0×1234,Bob=0x4567,rock=0x8912.
я должен извлечь значение, которое присваивается rock
.
Мне нужна помощь в написании сценария для этого.
Один вариант на @terdon - для каждого /rock=(...)/, скажем:
perl -nE 'say for /rock=(\w+)/'
и решение с grep
grep -Po 'rock=\K\w+' file
Вот один из способов:
$ perl -lne '/rock=([^.,]+)/ && print $1' file
0x8912
/rock=([^.]+)/
будет соответствовать строке rock=
и затем захватывать самый длинный отрезок одного или нескольких не .
символов ([^.]+
). Скобки "фиксируют" совпадение и делают его доступным как $1
. Если это соответствует, печатается $1
.
-l
удаляет завершающие новые строки из каждой входной строки и добавляет новую строку к каждому вызову print
. -n
говорит perl
читать строку входного файла построчно и применять скрипт, заданный -e
, к каждой строке.
Что-то вроде этого
echo Tom=0×1234,Bob=0x4567,rock=0x8912 | perl -E'while(<<>>){print map$_->[1],grep$_->[0]=~/rock/,[split/=/]for split/,/,$_}';
Это компилирует с warnings
и использует новое <<>>
таким образом, это - действительно хороший код жемчуга.