Как передать xxd один аргумент за раз? - PullRequest
0 голосов
/ 23 апреля 2020

Я извлекаю строковые данные из двоичного файла, после чего я передаю данные в grep, чтобы отделить только те части, которые имеют расширенный ASCII в них. Чтобы проверить, что это на самом деле, я передаю вывод grep по трубе в xxd. Мне было бы удобно вызывать xxd один раз в строке. Но как только я передаю данные в xxd через xargs, он обрабатывает входную строку как имя файла, которого, конечно, не существует.

someprocess.sh somebinaryfile.bin | grep -P '[\x80-\xFF]' | xxd Это работает, но имеет один большой двоичный объект из всех строк (я полагаю, строки). Я не совсем счастлив, так как мне приходится вручную искать каждую строку.

someprocess.sh somebinaryfile.bin | grep -P '[\x80-\xFF]' | xargs -n1 xxd Это дает No such file or directory для каждой строки. Если задать для xargs параметр -0, то только один оператор многострочного имени файла не будет найден.

someprocess.sh somebinaryfile.bin | grep -P '[\x80-\xFF]' | xargs -I{} xxd {} То же самое здесь.

someprocess.sh somebinaryfile.bin | grep -P '[\x80-\xFF]' | xargs -I{} xxd <<<{} Здесь я пытаюсь передать аргумент в виде файла, но это ничего не выводит и не сообщает об ошибках.

Я не уверен, что у меня есть какое-то недопонимание в обработке данных канала или это что-то особенное с xxd.

Возможно ли вызвать xxd для каждая строка отдельно и не думаете, что это имя файла дано ей?

...