Мне трудно использовать переменные внутри команды perl.
Я пытаюсь преобразовать команду perl в скрипт bash.Сценарий bash будет использоваться для поиска любого заданного файла по заданному шаблону регулярных выражений.Сценарий bash должен сначала запросить, какой файл открыть, а затем запросить шаблон регулярных выражений.
У меня уже есть рабочая командная строка, и все, что я пытался преобразовать в сценарий bash, не работает ... Я неУ меня нет большого опыта работы с командной строкой и скриптом bash, и я много читал в Интернете, и, похоже, ничего не работает.
#!/bin/bash
read -p "Enter the path to the file : " file_path
read -p "Enter the regular expression : " reg_exp
perl -ln0777e 'my $count=1; print "===================== RESULTS ====================="; while (/'"${reg_exp}"'/g) {printf("[%02d] Offset: 0x%x length: %dB\n Position: %d to %d \n Hex match: %s\n Original: %s\n", $count++, $-[ 0 ], length $1, $-[ 0 ], $-[ 0 ] + length( $1 ) - 1, unpack("H*",$1), $1)}' "${file_path}"
Когда я пытаюсь использовать переменные внутри регулярного выражения, это не таккажется, интерпретируется как переменная ...
Вот как должен выглядеть результат: введите описание изображения здесь
Моя командная строка такова:
perl -ln0777e 'my $count=1; print "===================== RESULTS ====================="; while (/REGULAR_EXPRESSION/g) {printf("[%02d] Offset: 0x%x length: %dB\n Position: %d to %d \n Hex match: %s\n Original: %s\n", $count++, $-[ 0 ], length $1, $-[ 0 ], $-[ 0 ] + length( $1 ) - 1, unpack("H*",$1), $1)}' SOURCE_FILE
РЕШЕНИЕ:
Вот рабочий код, который я придумал.Спасибо Икегами за помощь!
#!/bin/bash
read -rp "Enter the path to the file : " file_path
read -rp "Enter the regular expression : " reg_exp
perl -sn0777e'
while (/$reg_exp/g) {
printf "[%1\$02d] Matched %2\$d bytes from position %3\$d (0x%3\$x) to %4\$d (0x%4\$x)\n",
++$count, $+[0]-$-[0], $-[0], $+[0]-1;
printf " Hex: %s\n", unpack("H*", $&);
printf " Match: %s\n", $&;
}
' -- -reg_exp="${reg_exp}" -- "${file_path}"