У меня есть список случайных адресов памяти, сохраненных в текстовом файле, и мне нужно sed
их распечатать, декодировать и сохранить обратно в мой файл. Однако операция декодирования, которую я пытаюсь выполнить, обрабатывается в программе C ++, которую я создал некоторое время назад. Проблема, с которой я сталкиваюсь сейчас, - это выполнение C ++ внутри sed
команды; то есть я хочу сделать обратную ссылку на часть, которая должна быть декодирована, и использовать ее в качестве аргумента в моей программе на C ++. Я написал следующую команду:
cat $1 | sed -r 's/(0[Xx])([0-9A-Za-z]{1,8})/\1`./convAddrs \2`/g';
раньше у меня была возможность прочитать ответ в этом посте о том, что sed
он НЕ выполняет команды. Правда ли, что sed
не позволяет выполнять команды? Если да, то если я написал правильную sed
последовательность, как бы я ее записал perl
?
источник
Ответы:
perl -pe
: likesed
: обрабатывать входные данные по одной строке за раз$_
, оценивать perl [e] xpression, переданное-e
для каждой строки, и [p] повторно модифицировать$_
для каждой.s|X|Y|gei
: ЗаменаY
дляX
в$_
([г] lobally, случай [I] nsensitively, и лечениеY
как Perl [е] Xpression вместо основной строки).(?<=0x)
: Взгляд позади для0x
.[0-9a-f]{1,8}
: от одной до 8 шестнадцатеричных цифр, как можно больше`./convAddrs $&`
: заменить выводом этой командной строки оболочки, где$&
заменяется соответствующей частью.источник
/
здесь, поскольку он используется внутри запасной части. Исправлено.Может быть или не быть правдой, что
sed
не может выполнять команды. Это не относится к GNUsed
:Мне непонятно, что конкретно может быть в вашем
<$1
входе, и поэтому я стараюсь#
закомментировать все, что не находитсяcommand \2
в пространстве шаблонов. Когда вы используетеe
флаг GNU xecute вs///
ubstitution, он передает все результирующее пространство шаблона в$SHELL -c
качестве второго аргумента, а затем впоследствии заменяет все пространство шаблона на то, что записано в этот стандартный$SHELL
вывод. Так что я выше я печатаю все ваши результаты были раньше, а затем после результатов передачи командной строки в оболочку.источник