У меня есть файл input.txt, который имеет некоторые строки, и каждая строка имеет некоторые значения, назначенные ему.
Моя задача - написать скрипт Perl для извлечения числа, которое назначено любому из Строки.
Например, учитывая это input.txt
Tom=0×1234,Bob=0x4567,rock=0x8912.
Мне нужно извлечь значение, присвоенное rock.
Мне нужно некоторые помогают писать сценарий для этого.
Что-то вроде этого
echo Tom=0×1234,Bob=0x4567,rock=0x8912 | perl -E'while(<<>>){print map$_->[1],grep$_->[0]=~/rock/,[split/=/]for split/,/,$_}';
Это компилируется с warnings и использует новый <<>>, поэтому это действительно хороший Perl-код.
Один вариант на @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. [F10] сообщает perl читать входной файл по строкам и применять скрипт, заданный -e для каждой строки.
Что-то вроде этого
echo Tom=0×1234,Bob=0x4567,rock=0x8912 | perl -E'while(<<>>){print map$_->[1],grep$_->[0]=~/rock/,[split/=/]for split/,/,$_}';
Это компилируется с warnings и использует новый <<>>, поэтому это действительно хороший Perl-код.
Один вариант на @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. [F10] сообщает perl читать входной файл по строкам и применять скрипт, заданный -e для каждой строки.